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