sql >> Database teknologi >  >> RDS >> Mysql

Søg i JSON-kolonnen ved hjælp af Laravels veltalende

For at se om template_ids JSON-feltet indeholder "enhver" af værdierne i et nålearray, du skal bruge flere ELLER 'd JSON_CONTAINS forhold, der kræver 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);

Laravels forespørgselsbygger vil producere en forespørgsel som:

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

Som målretter mod poster, der har nogen af ​​disse id'er i deres template_ids JSON-type felt.

Du kan være interesseret i at læse et relateret Laravel internals forslag .



  1. Hvordan indstiller jeg MySQL midlertidigt til skrivebeskyttet via kommandolinjen?

  2. Sådan uploader du flere billeder i laravel

  3. Sådan returnerer du antallet af sekunder efter midnat i Oracle-databasen

  4. Hvordan forbindes i java som SYS til Oracle?