因此,我有一个产品集合($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,尽管我怀疑这是问题的原因。

09-17 11:08