Laravel Eloquent JSON Contains,如何提供WhereIn逻辑(数组值之一)

D3V*_*V1L 10 mysql laravel eloquent

这是我的代码:

protected function room_count($room_count)
{
    $query = $this->builder
        ->whereJsonContains('rent_requests.rooms_count', $room_count);

    return $query;
}
Run Code Online (Sandbox Code Playgroud)

有我的过滤功能。$room_count是数组,例如可以是[2,4]. rent_requests.rooms_count是 MySQL 中的 JSON 数组,例如可以是[2,3]. 我需要过滤这个,才能显示这个广告,但是 whereJSONContains 期望会有2 and 4,而不是2 or 4。有什么技巧可以让这个功能正常工作吗?像 json 这样的东西包含 whereIn ?)对不起我的英语,我真的很困惑,请帮助我:)

Don*_*ash 13

MySQL 和 PostgreSQL 支持具有多个值的 whereJsonContains:

因此,如果您使用任一数据库,则可以传递 $room_count 作为第二个参数

// Room Count Filter
protected function room_count($room_count)
{

    return $this->builder
        ->where(function($query) use($room_count){
     
            $query->whereJsonContains('rent_requests.rooms_count', $room_count[0]);
    
            for($i = 1; $i < count($room_count); $i++) {
               $query->orWhereJsonContains('rent_requests.rooms_count', $room_count[$i]);      
            }
    
            return $query;
      });
}
Run Code Online (Sandbox Code Playgroud)

Laravel 文档:https://laravel.com/docs/8.x/queries#json-where-clauses