sql >> Databáze >  >> RDS >> Mysql

Hledejte ve sloupci JSON pomocí Laravelova výmluvného

Chcete-li zjistit, zda template_ids Pole JSON obsahuje „libovolnou“ z hodnot v poli jehel, budete muset použít více OR 'd JSON_CONTAINS podmínky, které vyžadují MySQL 5.7:

$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);

Tvůrce dotazů Laravel vytvoří dotaz jako:

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

Které cílí na záznamy, které mají ve svém template_ids kterékoli z těchto ID Pole typu JSON.

Možná vás bude zajímat související interní návrh související Laravel .



  1. Limitní rozsah MySQL

  2. Hledání fulltextového booleovského režimu MySQL vrací příliš mnoho výsledků

  3. phpMyAdmin hází #2002 nelze se přihlásit k serveru mysql phpmyadmin

  4. Aktualizace Laravel nebo vytvoření pomocí automatické přírůstkové databáze