繁体   English   中英

如何查询 laravel 中的 json 列?

[英]How can I make query where json column in the laravel?

我用 laravel 5.6

我有一个领域。 该字段的数据类型为json

字段(desc字段)的值是这样的:

[
{"code": "1", "club": "CHE", "country": "ENGLAND"}, 
{"code": "2", "club": "BAY", "country": "GERMANY"}, 
{"code": "3", "club": "JUV", "country": "ITALY"}, 
{"code": "4", "club": "RMA", "country": "SPAIN"}, 
{"code": "5", "club": "CHE", "country": "ENGLAND"}, 
{"code": "6", "club": "BAY", "country": "GERMANY"}, 
{"code": "7", "club": "JUV", "country": "ITALY"}, 
{"code": "8", "club": "RMA", "country": "SPAIN"}, 
{"code": "CODE", "club": "CLUB", "country": "COUNTRY"}
]

我想检查俱乐部的钥匙是否具有价值“CHE”

我这样尝试:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我怎么解决这个问题?

我使用 Laravel 5.6

我有一个领域。 该字段的数据类型为json

字段(desc 字段)的值如下所示:

[
{"code": "1", "club": "CHE", "country": "ENGLAND"}, 
{"code": "2", "club": "BAY", "country": "GERMANY"}, 
{"code": "3", "club": "JUV", "country": "ITALY"}, 
{"code": "4", "club": "RMA", "country": "SPAIN"}, 
{"code": "5", "club": "CHE", "country": "ENGLAND"}, 
{"code": "6", "club": "BAY", "country": "GERMANY"}, 
{"code": "7", "club": "JUV", "country": "ITALY"}, 
{"code": "8", "club": "RMA", "country": "SPAIN"}, 
{"code": "CODE", "club": "CLUB", "country": "COUNTRY"}
]

我想检查俱乐部的钥匙是否有价值“CHE”

我尝试这样:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我怎么解决这个问题?

我使用 Laravel 5.6

我有一个领域。 该字段的数据类型为json

字段(desc 字段)的值如下所示:

[
{"code": "1", "club": "CHE", "country": "ENGLAND"}, 
{"code": "2", "club": "BAY", "country": "GERMANY"}, 
{"code": "3", "club": "JUV", "country": "ITALY"}, 
{"code": "4", "club": "RMA", "country": "SPAIN"}, 
{"code": "5", "club": "CHE", "country": "ENGLAND"}, 
{"code": "6", "club": "BAY", "country": "GERMANY"}, 
{"code": "7", "club": "JUV", "country": "ITALY"}, 
{"code": "8", "club": "RMA", "country": "SPAIN"}, 
{"code": "CODE", "club": "CLUB", "country": "COUNTRY"}
]

我想检查俱乐部的钥匙是否有价值“CHE”

我尝试这样:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我怎么解决这个问题?

我使用 Laravel 5.6

我有一个领域。 该字段的数据类型为json

字段(desc 字段)的值如下所示:

[
{"code": "1", "club": "CHE", "country": "ENGLAND"}, 
{"code": "2", "club": "BAY", "country": "GERMANY"}, 
{"code": "3", "club": "JUV", "country": "ITALY"}, 
{"code": "4", "club": "RMA", "country": "SPAIN"}, 
{"code": "5", "club": "CHE", "country": "ENGLAND"}, 
{"code": "6", "club": "BAY", "country": "GERMANY"}, 
{"code": "7", "club": "JUV", "country": "ITALY"}, 
{"code": "8", "club": "RMA", "country": "SPAIN"}, 
{"code": "CODE", "club": "CLUB", "country": "COUNTRY"}
]

我想检查俱乐部的钥匙是否有价值“CHE”

我尝试这样:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我怎么解决这个问题?

我使用 Laravel 5.6

我有一个领域。 该字段的数据类型为json

字段(desc 字段)的值如下所示:

[
{"code": "1", "club": "CHE", "country": "ENGLAND"}, 
{"code": "2", "club": "BAY", "country": "GERMANY"}, 
{"code": "3", "club": "JUV", "country": "ITALY"}, 
{"code": "4", "club": "RMA", "country": "SPAIN"}, 
{"code": "5", "club": "CHE", "country": "ENGLAND"}, 
{"code": "6", "club": "BAY", "country": "GERMANY"}, 
{"code": "7", "club": "JUV", "country": "ITALY"}, 
{"code": "8", "club": "RMA", "country": "SPAIN"}, 
{"code": "CODE", "club": "CLUB", "country": "COUNTRY"}
]

我想检查俱乐部的钥匙是否有价值“CHE”

我尝试这样:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我怎么解决这个问题?

MyModel::whereJsonContains('desc->club', 'CHE')->first();

您可以将此 scope 添加到 model 并使用

public function scopeJsonArrayHasCondition($query , $col , $keys , $function , $as = 'temp_table')
    {
        $columns = [];
        foreach ($keys as $key){
            $columns[] = "$key VARCHAR(150) PATH '$.$key'";
        }
        $columns = implode(',',$columns);
        return $query->join(\DB::raw("JSON_TABLE($col, '$[*]' COLUMNS($columns)) as $as") , function(){})
            ->where($function);
    }

如何使用

BranchContract::query()->jsonArrayHasCondition('payments',[
            'club' , 'country'
        ],function ($q){
            $q->where('temp_table.country' , 'ENGLAND')->where('temp_table.club' , 'CHE');
        })->get()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM