如何在laravel 5中对Eloquent Relationship执行包含子查询的连接

时间:2015-10-24 15:50:46

标签: php mysql laravel-5 eloquent

我是laravel的新手。我正在研究这个laravel 5应用程序,但却试图执行如下的查询。

select * from carts inner join users on carts.manager_id = users.id
where cart_num like "e%" OR name like "e%"
having region = (select region from users where id = 3);

修改

查询的目的是让管理员的购物车与管理员在同一地区(因此可以选择subselect .id是管理员的ID)

修改

我提出了类似的事情:

return Cart::join('users', 'carts.manager_id', '=', 'users.id')
             ->where('cart_num', 'like', $match . '%')
             ->orWhere('name', 'like', $match . '%')
             ->having('region', '=', function ($query) use ($id) {
                 return $query->select('region')->where('id', '=', $id);
            })
            ->get();

关于如何改进having子句的任何想法。我得到错误类Closure的对象无法转换为字符串。感谢

2 个答案:

答案 0 :(得分:1)

我认为这就是你需要的

<td class="details perimter">
   <div class="details-container">

   <!-- ... skipped ... -->

   </div>
</td>

答案 1 :(得分:0)

这是一个没有该子选择的相同查询,我认为这是不必要的。你可以改为实现它并将region参数传递给它吗?自您加入该表后,您的用户已经拥有了一个区域,而user.id 成为主键,因此您无论如何都会拥有一个区域。

select * from carts inner join users 
on carts.manager_id = users.id
and users.region = $region
where cart_num like "e%" OR name like "e%" ;