Laravel / Eloquent - 在多字段搜索表单中使用动态属性

时间:2014-05-11 16:00:28

标签: php dynamic properties laravel eloquent

我在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变量中,因为我的表单中的所有字段都是可选的,因此我只根据具有值的输入构建查询。

有点难过,所以如果有人已经解决过这样的问题,我们将不胜感激。干杯!

2 个答案:

答案 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();