Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-如何使用关系列中的任何内容创建搜索筛选器_Php_Laravel_Logic_Backend_Back - Fatal编程技术网

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()
逻辑;任何一种方法都是有效的,谢谢!你们太棒了!谢谢成功了!你太棒了!