我在Laravel应用程序中有一个搜索表单,用于搜索属性列表。我的属性表已经有一个模型,并且连接到另一个名为details的模型/表,其中包含某些属性,如果某个属性具有花园,车库等,通过一对多关系。在做索引或显示东西时这很好 - 我可以使用$ property->详细信息获取属性的详细信息。
搜索表单中有一个字段,用户可以在其中搜索此类详细信息,这就是我挣扎的地方。我不需要自己查找详细信息,我需要首先查看输入中是否存在与Details表中的任何内容匹配的内容,然后查看外键(称为prop_id)是否与我的任何属性ID匹配&#39 ; s,然后在结果中包含这些属性。类似的东西:
$query = Property::where('archived',0);
$query->details->where('text',$keyword);
$results = $query->get();
这不起作用的原因是因为详细信息不是$ query的属性,但是我不确定使用什么来替代调用Property :: where()肯定会重置整个查询。我将它全部存储在$ query变量中,因为我的表单中的所有字段都是可选的,因此我只根据具有值的输入构建查询。
有点难过,所以如果有人已经解决过这样的问题,我们将不胜感激。干杯!
答案 0 :(得分:0)
使用whereHas
:
$query = Property::where('archived', 0)->whereHas('details', function ($q) use ($keyword)
{
$q->where('text', $keyword);
});
$results = $query->get();
答案 1 :(得分:0)
您可以尝试这样的事情:
$query = Property::where('archived', 0);
if(isset($keyword)) {
$query->whereHas('details', function ($q) use ($keyword) {
$q->where('text', $keyword);
});
}
$results = $query->get();