Laravel 5:Eloquent'或者'的替代品。查询集合的方法

时间:2017-02-14 15:30:44

标签: php laravel laravel-5 laravel-5.1

所以我有一系列产品($this->products),这些产品是我在模型查询中得到的,我希望通过它的一些属性值来过滤它。问题在于Laravel没有像Eloquent这样的集合有orWhere这样的方法来查询模型。另外,我想使用LIKE %{$searching_for}%通配符,我不确定如何使用它(如果可能的话)来过滤我的收藏。

这是我尝试过滤我的集合的代码,显然会引发Exception orWhere方法不存在的代码:

$products = $this->products
        ->where("field1", "LIKE %{$searching_for}%")
        ->orWhere("field2", "LIKE", "%{$searching_for}%")
        ->orWhere("field3", "LIKE", "%{$searching_for}%")
        ->orWhere("field4", "LIKE", "%{$searching_for}%");

我想直接查询模型,但我只是将$products集合存储在Session中,这样我就可以在任何需要的地方使用它,我不想经常查询数据库所以我正在寻找解决方案以某种方式过滤现有的集合。

2 个答案:

答案 0 :(得分:6)

尝试使用laravel collection的过滤方法。

collect($this->products)->filter(function($value) use ($search) {
    return (stripos($value->field1, $search) || 
        stripos($value->field2, $search) ||
        stripos($value->field3, $search) ||
        stripos($value->field4, $search));
});

此处$ search是您要搜索的值。

答案 1 :(得分:3)

类似于Saravanan建议这样做的尝试:

<input type="submit" name="submit" value="Login &#9656;">

确保将过滤后的集合分配给变量。它也使用$products = $this->products->filter(function($product) use ($searching_for) { return strstr($product->field1, $searching_for) || strstr($product->field2, $searching_for) || strstr($product->field3, $searching_for) || strstr($product->field4, $searching_for); }) 作为strstr的替代,但我怀疑这是问题的原因。