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
的替代方法,尽管我怀疑这是问题的原因。
所以我有 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
的替代方法,尽管我怀疑这是问题的原因。