【发布时间】:2020-07-02 12:32:46
【问题描述】:
我必须根据$search 是否存在,有条件地过滤以下查询中的结果。
以下是我的查询,
Sellers::with(
'shop:id,width,height,business_id'
)->with(
'unit.location:id,name as l_name'
)->select(
'sellers.id', 'sellers.name' , 'address'
)->when($search, function ($query, $search) {
$query->where('l_name', 'like', '%' . $search . '%');
})
->findOrFail($request->seller_id);
关系是,
卖家有很多单位。 单位有一个位置。
我需要根据搜索参数的可用性过滤上述位置名称的结果。 我尝试添加别名,但它们会抛出错误。
如何做到这一点?
【问题讨论】:
-
你可以查看
whereHas- 查询关系存在 -
试过了。它似乎不适用于 unit.location 之类的关系。
-
它适用于嵌套关系
-
它抛出什么错误?也试试这个代码
function ($query) use ($search)而不是function ($query, $search) -
@lagbox 这就是我尝试过的。卖家::with('widget:id,width,height,business_id')->whereHas('unit.location', function($q) use($search) { $q->where('locations.name', $search); }) ->select( '*' ) ->findOrFail($request->seller_id);位置数组在所有情况下都是空的。我在这里做错了什么?
标签: laravel laravel-5 eloquent laravel-7