为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法循环遍历表中 json 列中的嵌套对象并使用 Laravel 中的查询构建器检查条件?

有没有办法循环遍历表中 json 列中的嵌套对象并使用 Laravel 中的查询构建器检查条件?

PHP
慕容3067478 2021-12-03 10:37:04
我有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();


查看完整回答
反对 回复 2021-12-03
?
呼如林

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);

        }

    }

}


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信