Collection.php
文件是 Flarum 框架中的一个自定义集合类,继承自 Laravel 的 BaseCollection
。该类主要用于处理数据库模型的集合,具有以下主要功能:
- 命名空间:
Flarum\Database\Eloquent
- 继承: 继承自
Illuminate\Database\Eloquent\Collection
主要方法包括:
loadAggregate
:
- 作用: 解决在使用可见性作用域和急切加载
mentionedBy
的计数时产生的查询冲突问题。
- 实现: 通过在父查询中应用别名,防止 Laravel 自动为子查询生成别名。
- 示例查询问题见注释部分。
loadMissingRelation
:
- 作用: 优化加载缺失关系的逻辑,避免不必要的属性变换器运行。
- 实现: 替换
->whereNotNull()
为简单的 ->where(fn (mixed [imath:0]relation) => [/imath:0]relation !== null)
,以避免变换器在 loadMissing()
调用完成前运行。
这个自定义集合类通过优化查询和关系加载,提升了性能并解决了一些特定场景下的冲突问题。详细代码可以在 这里 查看。