Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсете в колона JSON с помощта на eloquent на Laravel

За да видите дали template_ids JSON полето съдържа "всякои" от стойностите в игления масив, ще трябва да използвате множество OR 'd JSON_CONTAINS условия, които изискват 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);

Създателят на заявки на Laravel ще произведе заявка като:

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

Което е насочено към записи, които имат някой от тези идентификатори в техните template_ids Въведено от JSON поле.

Може да се интересувате да прочетете свързано предложение за вътрешни елементи на Laravel .



  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 заявка?

  2. Настройки на кеша на заявките на MySql

  3. Как да напиша най-голямото n за заявка от тип група, но с допълнителни условия?

  4. Как мога да вмъкна реално време на събитие в база данни с помощта на php mysqli?

  5. добавянето на пакет RMySQL към R се проваля (в Windows)?