我有events带有 json 列的表guests。guests字段的数据如下所示:{"lines": [{"men":1, "women":1, "children":1, "language_id":291, "language_name":"test", }], [{"men":1, "women":1, "children":1, "language_id":292, "language_name":"test2", }], "totalMen":2, "totalWomen":2, "totalChildren":2, "total":6,}我需要使用特定的 language_id 在控制器中获取事件。但是字段guests内部可以有多个数组lines,所以我需要以某种方式检查特定语言 ID 的所有行。现在我这样做:$language = Language::findOrFail($lid);$events = Event::get();foreach($events as $event) { foreach($event['guests']['lines'] as $line){ if($line['language_id'] === $language->id) { // do smth break; } }}有没有办法根据我的条件在 laravel 中使用查询构建器获取事件,所以我不需要先获取所有事件,然后再过滤它们?
2 回答
九州编程
TA贡献1785条经验 获得超4个赞
您可以使用内置的 Laravel JSON Where Clauses。我认为通过一些播放和一些调试,您可以实现您需要做的事情。
这是使用您的 JSON 架构的示例:
$events = DB::table('events') ->where('guests->lines->language_id', $language->id) ->get();
呼如林
TA贡献1798条经验 获得超3个赞
您可以使用 JSON_EXTRACT mysql 函数。
请关注这篇文章了解更多详情。 https://database.guide/json_extract-return-data-from-a-json-document-in-mysql/
我正在用核心 PHP 编写。请相应地定制。
$sql = "SELECT JSON_EXTRACT(guests, '$.lines') as guest FROM `t1`";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
$json_array = json_decode($row['guest']);
foreach($json_array as $line) {
echo "<br>";
print_r($line->men);
}
}
}
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消