sql >> Database >  >> RDS >> Mysql

Zoek in de JSON-kolom met behulp van de welsprekende taal van Laravel

Om te zien of de template_ids JSON-veld bevat "elke" waarden in een naaldarray, u moet meerdere OR gebruiken 'd JSON_CONTAINS voorwaarden die MySQL 5.7 vereisen:

$ids = ['1', '3', '48'];

Post::where('accessable_to', 1)
    ->where(function ($query) use ($ids) {
        $firstId = array_shift($ids);

        $query->whereRaw(
            'JSON_CONTAINS(template_ids, \'["' . $firstId . '"]\')'
        );

        foreach ($ids as $id) {
            $query->orWhereRaw(
                'JSON_CONTAINS(template_ids, \'["' . $id . '"]\')'
            );
        }

        return $query;
    });

return Post::paginate(3);

De querybuilder van Laravel zal een query produceren zoals:

SELECT * FROM "posts" 
WHERE "accessable_to" = ? AND (
    JSON_CONTAINS(template_ids, '["1"]') OR 
    JSON_CONTAINS(template_ids, '["3"]') OR 
    JSON_CONTAINS(template_ids, '["48"]')
)

Welke records targeten die een van deze ID's in hun template_ids hebben? JSON-getypt veld.

Mogelijk bent u geïnteresseerd in het lezen van een gerelateerd Laravel internals voorstel .



  1. mysql database automatisch partitioneren

  2. MySQL:ALTER NEGEER TABEL UNIEK TOEVOEGEN, wat wordt afgekapt?

  3. Krijg alle tekens vóór de spatie in MySQL

  4. NodeJS MySQL:uitvoeringstijd van query's meten