Laravel过滤整个集合或使用范围

时间:2019-09-15 18:03:04

标签: mysql laravel filtering

我正在为特定的Eloquent模型实现一些过滤器。

现在,我从数据库中获取所有可用产品,并将命令包装在laravels Cache::remember ()函数中。然后,我通过一系列过滤器类传递此集合。在每个过滤器类中,我执行一个$productCollection->filter()动作,该动作返回所有适合的乘积。最后,我得到了所有符合给定过滤器参数的产品。

现在,我想知道这是否是一个好习惯,还是在数据库查询期间使用范围或直接过滤会更好。

某些过滤器过滤直接匹配的内容(例如,品牌ID必须为4)。其他人则具有一组可能的适合度(例如,类别必须为ID 3、4或7)。

1 个答案:

答案 0 :(得分:2)

这取决于您的应用程序规模和要过滤的集合的大小。如果您的产品系列很小,大约有100个型号,那就没有什么区别。但是,如果您需要过滤1k +个模型,最好直接将query scope与您的雄辩模型一起使用。 query scopes将仅返回与范围条件匹配的寄存器,而->filter()方法将遍历所有模型,然后仅获取那些与您在过滤器中指定的规则匹配的模型回调函数。 在简历中,最好只返回所需的记录,因为这样可以消除遍历所有记录并仅返回一半或更少记录的需要。 除此之外,query scopes允许您定义可在整个应用程序中重复使用的常见约束集,而如果使用集合过滤器,则每次使用时都需要重写相同的过滤器。< / p>

有关query scopes的文档。

Mateus,问候。