如何在 laravel 5.7 中获取 json 值?
How to get json value in laravel 5.7?
我在数据库中有两个表,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]: 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
我在数据库中有两个表,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]: 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