Laravel 5:Eloquent 的 'orWhere' 查询方法的替代方法 collections

Laravel 5: Alternative for Eloquent's 'orWhere' method for querying collections

所以我有 collection 个产品 ($this->products),这是我通过模型查询获得的结果,我想通过它的一些属性值来过滤它。问题是 Laravel 对于 collection 没有像 orWhere 这样的方法,就像 Eloquent 对于查询模型一样。此外,我想使用 LIKE %{$searching_for}% 通配符,但我不确定如何使用它(如果可能的话)来过滤我的 collection.

这是我试图过滤我的 collection 的代码,显然会抛出 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 collection 存储在 Session 中,这样我就可以在任何需要的地方使用它,我不想过于频繁地查询数据库,所以我正在寻找一种解决方案以某种方式过滤现有的 collection.

尝试使用 laravel 集合的过滤方法。

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 是您要搜索的值。

类似于 Saravanan 建议的做法,试试这个:

$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 作为 stripos 的替代方法,尽管我怀疑这是问题的原因。