Php Laravel-如何使用关系列中的任何内容创建搜索筛选器
我试图进行一个查询,根据请求词返回结果,但我也必须使用关系列进行过滤。例如:Php Laravel-如何使用关系列中的任何内容创建搜索筛选器,php,laravel,logic,backend,back,Php,Laravel,Logic,Backend,Back,我试图进行一个查询,根据请求词返回结果,但我也必须使用关系列进行过滤。例如: Payment::byUnity($unityId) ->with(['contract:id,nome,sigla']) ->latest('id') ->where('id', 'LIKE', '%' . $request->input('search') . '%') ->orWhere(
Payment::byUnity($unityId)
->with(['contract:id,nome,sigla'])
->latest('id')
->where('id', 'LIKE', '%' . $request->input('search') . '%')
->orWhere('name', 'LIKE', '%' . $request->input('search') . '%')
->orWhere('contract.name', 'LIKE', '%' . $request->input('search') . '%')
->orWhere('contract.description', 'LIKE', '%' . $request->input('search') . '%')
->paginate(15)
如何筛选查询中的“contract.name”?因为示例的方式返回错误。提前谢谢 你能行
Payment::byUnity($unityId)
->with(['contract:id,nome,sigla'])
->latest('id')
->where('id', 'LIKE', '%' . $request->input('search') . '%')
->orWhere('name', 'LIKE', '%' . $request->input('search') . '%')
->orWhereHas('contract', function($query) use ($request) {
return $query->where('name', 'LIKE', '%' . $request->input('search') . '%')
->orWhere('description', 'LIKE', '%' . $request->input('search') . '%');
}
->paginate(15)
注意:您必须设置适当的关系才能使此查询正常工作。您需要使用
join()
语法来创建合同。name
可在where()
和orWhere()
子句中查询with()
在基本查询中不包含该表,join()
包含该表。谢谢您的回答!但是,如果我删除“where”子句,我可以看到带有带有“with()”的合同的返回,没有问题。因此,为了使其“可查询”,我必须在“with()”之后执行一个“join()”?join()
,而不是在with()
之外,或者在with()
之外执行一个“join()”,其位置无关紧要。您可以执行类似于Model::join('related_table','related_table.related_id','=','table.id')
,然后可以执行->where('table.column')->或where('related_table.column')…
。或者在下面的答案中使用whereHas()
逻辑;任何一种方法都是有效的,谢谢!你们太棒了!谢谢成功了!你太棒了!