如何在 laravel 5.7 中获取 json 值?

How to get json value in laravel 5.7?

我在数据库中有两个表,packagecategories

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]: Syntax error or access violation: 1305 FUNCTION
pre.JSON_CONTAINS does not exist (SQL: select * from `packages` where
JSON_CONTAINS(category_id, '["11"]'))

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

所以请尝试:

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

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

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

PHP 有一个内置方法 json_encode() 可以轻松地将数组编码为 JSON 字符串格式。我们可以将其实现为: 我们也可以在 laravel

中使用它

$array = array('laptop','earphones','mouse'); return json_encode($数组);

但是,较新版本的 Laravel 也有自己的 json() 方法,它会自动设置相关的 Content-Type 并编码 JSON 数据:

$array = array('laptop','earphones','mouse'); return 响应()->json($array);

示例JSON:

[ { "id": 11, "first_name": "Anthony", "last_name": "Ross", "language": "english", "grade": 1 } ]

如果 json 中有多个值,那么您可以尝试这样的循环,

foreach($target as $target_result){
  echo $target_result->id;
}

如果你只有一条记录那么试试,

$target = Var::where('first_name', '=', $request->input('jsonArr'))->first();
return $jsonArr->id