首页 > 解决方案 > 如何在 laravel 5.7 中获取 json 值?

问题描述

我在数据库中有两个表,package并且categories.

package有一个字段category_id包含此表单中的数据,并以复选框的形式["1","11"]显示categories数据。

package现在,我想要所有数据来自category_id等于categories id.

这是我的代码:

public function archive_packages(Request $request, $slug){
    $title='Archive Packages';
    $para='';
    $slugs='archive-packages';
    $categoryRow = Category::where('slug',$slug)->first();
    $categoryID = $categoryRow->id;
    $package = Packages::whereRaw('JSON_CONTAINS(category_id, \'["11"]\')')->get();
    dd($package);
    return view('pages.archive-packages',compact('title','para','slugs','package'));
}

我收到以下错误:

SQLSTATE [42000]:语法错误或访问冲突:1305 FUNCTION
pre.JSON_CONTAINS 不存在(SQL:select * from `packages` where
JSON_CONTAINS(category_id, '["11"]'))

标签: phpmysqllaravellaravel-5.7

解决方案


有一个 laravel 方法可以做到这一点,更多细节在这里

所以请尝试:

Packages::whereJsonContains('category_id', '11')->get();

如果您的 mysql 版本不支持json_contains且无法升级,请尝试以下查询:

Packages::where('category_id', 'like', '%"11"%');

推荐阅读