Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Szukaj w kolumnie JSON za pomocą elokwentnego Laravela

Aby sprawdzić, czy template_ids Pole JSON zawiera „dowolną” z wartości w tablicy igłowej, musisz użyć wielu LUB 'd JSON_CONTAINS warunki, które wymagają 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);

Kreator zapytań Laravela wygeneruje zapytanie takie jak:

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

Który celuje w rekordy, które mają którykolwiek z tych identyfikatorów w swoich template_ids Pole typu JSON.

Możesz zainteresować się pokrewną propozycją dotyczącą wewnętrznych użytkowników . .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Błąd usuwania bazy danych (errno 13; errno 17; errno 39)

  2. Opcjonalne kolumny do filtrowania rekordów bazy danych

  3. Różnica między FIELD() i FIND_IN_SET() w MySQL

  4. Pythona „float64” nie można przekonwertować na typ MySQL, ale w ręcznym zapytaniu nie stanowi to problemu

  5. Nodejs wyraża i obiecuje nie robić tego, czego oczekuję