Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cari di kolom JSON menggunakan fasih Laravel

Untuk melihat apakah template_ids Bidang JSON berisi "setiap" nilai dalam larik jarum, Anda perlu menggunakan beberapa OR 'd JSON_CONTAINS kondisi yang membutuhkan 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);

Pembuat kueri Laravel akan menghasilkan kueri seperti:

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

Yang menargetkan catatan yang memiliki salah satu ID tersebut di template_ids bidang bertipe JSON.

Anda mungkin tertarik untuk membaca proposal internal Laravel terkait .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. argumen yang diberikan bukan sumber daya hasil MySQL yang valid

  2. Hibernate @Version menyebabkan kegagalan batasan kunci asing basis data

  3. Performa MySQL pada 6 juta tabel baris

  4. Bagaimana cara memilih semua catatan kecuali 3 catatan pertama?

  5. Kesalahan pernyataan pembatas MySQL