【问题标题】:Laravel filter whole collection or use scopesLaravel 过滤整个集合或使用范围
【发布时间】:2020-01-16 16:47:06
【问题描述】:

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

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

现在我想知道这是否是一种好的做法,或者在数据库查询期间直接使用范围或过滤器是否会更好。

一些过滤器过滤直接匹配(例如品牌必须是 id 4)。其他有一组可能的拟合(例如,类别必须是 id 3、4 或 7)。

【问题讨论】:

    标签: mysql laravel filtering


    【解决方案1】:

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

    关于query scopes的文档。

    问候,马特乌斯。

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多