如何使用Laravel查询生成器在JSON数组对象中进行搜索?

时间:2019-03-03 10:59:59

标签: php laravel laravel-5

这是json数组

"section_4": {
"data": [
{
"grade": "3.0",
"degree": "BSCSE",
"end_date": "2019-03-28T10:35:00.000Z",
"institute": "DIU",
"start_date": "2019-03-25T10:35:00.000Z"
},
{
"grade": "4.0",
"degree": "BSCSE",
"end_date": "2019-04-30T10:50:00.000Z",
"institute": "STU",
"start_date": "2019-03-31T10:50:00.000Z"
}
],
"type": "education",
"title": "Educations"
},

想按年级搜索,可以用查询生成器搜索吗?

$resumes = UserMeta::with(['user.resume' => function ($query) {
                $query->where('data->section_4->type', 'like', '%education%');
        }])->paginate(10);

这是尝试在控制器中搜索的代码。可以使用查询生成器laravel进行等级搜索吗?

2 个答案:

答案 0 :(得分:0)

Laravel提供了whereJsonContains,因此您可以尝试以下代码:

$resumes = UserMeta::with(['user.resume' => function ($query) {
                $query->whereJsonContains('data->section_4->type', 'like', '%education%');
        }])->paginate(10);

OR 您还可以在这种情况下结合使用whereRawJSON_CONTAINS

例如

whereRaw("JSON_CONTAINS(type, '[education]' )")->get();

有关更多信息,请检查此post

答案 1 :(得分:0)

要在 Laravel 中的 json 数组中搜索,您可以使用以下命令: 例如,您希望从“数据”数组中检查“等级”中的值:

$resumes = UserMeta::with(['user.resume' => function ($query) {
            $query->whereJsonContains('data->data', ['grade' => "3.0"]);
    }])->paginate(10);

完成....