因此,我有一个产品集合($this->products
),这些产品是通过Model查询获得的,我想通过其某些属性值对其进行过滤。问题在于,Laravel没有像elot这样的用于查询模型的集合像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中,这样我就可以在需要的任何地方使用它,我不想查询数据库太多,所以我正在寻找一种解决方案,以某种方式过滤现有集合。 最佳答案
与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
,尽管我怀疑这是问题的原因。