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

我有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 中使用查询构建器获取事件,所以我不需要先获取所有事件,然后再过滤它们?


慕容3067478
浏览 164回答 2
2回答

九州编程

您可以使用内置的 Laravel JSON Where Clauses。我认为通过一些播放和一些调试,您可以实现您需要做的事情。这是使用您的 JSON 架构的示例:$events = DB::table('events')                 ->where('guests->lines->language_id',  $language->id)                 ->get();

呼如林

您可以使用 JSON_EXTRACT mysql 函数。请关注这篇文章了解更多详情。 https://database.guide/json_extract-return-data-from-a-json-document-in-mysql/我正在用核心 PHP 编写。请相应地定制。$sql =&nbsp; "SELECT JSON_EXTRACT(guests, '$.lines') as guest FROM `t1`";$result = mysqli_query($conn, $sql);if (mysqli_num_rows($result) > 0) {&nbsp; &nbsp; // output data of each row&nbsp; &nbsp; while($row = mysqli_fetch_assoc($result)) {&nbsp; &nbsp; &nbsp; &nbsp; $json_array = json_decode($row['guest']);&nbsp; &nbsp; &nbsp; &nbsp; foreach($json_array as $line) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "<br>";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_r($line->men);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP