sql >> データベース >  >> RDS >> Mysql

Laravelの雄弁なものを使用してJSON列を検索する

    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にこれらのIDのいずれかが含まれるレコードをターゲットにする JSONタイプのフィールド。

    関連するLaravel内部提案 を読むことに興味があるかもしれません。 。



    1. Mysql2つの日時フィールドを比較します

    2. MySQLレプリケーション:GTIDベースのレプリケーションでの誤ったトランザクション

    3. MySQLでのクエリキャッシュの防止

    4. SQLServerでBegin/End BlocksとGoキーワードを使用する必要があるのはいつですか?