如何通过旅行关系进行过滤



如果我能在以下场景中过滤laravel关系,有人能帮助我吗?我想用单子id/或customer_id/或客户名进行过滤。

public function search_index($query){
$slip = Slip::with('customer')
->where('slip_id',$query)
->orWhere('customer.id',$query)
->orWhere('customer.name',$query)->get();
}

编辑:有两类:单子和客户。与顾客的关系是,顾客有许多条条。

该条包含其他信息,包括客户id和使用"客户"关系检索客户。现在,我希望能够通过输入客户名称/id或票据id来查找票据。($query)可以有这些细节之一

Slip::with('customer')以以下模式返回详细信息:

[{slip:{id:1, ref:'abc', customer:{id:1,name:'Joe'}},}]

我希望查询也以类似的方式返回结果。

Thanks in advance

我还没有执行代码,但我很确定这将会工作。

$slip = Slip::query
->whereHas('customer', function(Builder $q) use ($query) {
return $q->where('id', $query) //Search by customer id
->orWhere('name', 'like', '%'.$query.'%'); //search by customer name similiarity
})
->orWhere('id', $query) //search by slip_id
->get();

这不是我建议的最佳实践。建议您将查询分解为3个较小的函数/模块,然后获得它们的intersect()作为最终结果。

最新更新