我有以下数据库(为了演示而简化):
- 项目
- ID
- 名称
- 里程碑
- ID
- 名称
- 项目里程碑
- ID
- 项目ID
- 里程碑ID
- 完成日期
- 文件
- ID
- 文件名
- 可文件类型
- 文件标识
我创建了一堆有里程碑的项目,当我循环通过这些项目时,我可以很容易地从item_milestone访问数据,比如'completed_at'。但是,如果我有一个通过fileable_type = 'App\Models\ItemMilestone'和记录id链接到里程碑项目的文件-我如何在循环中访问该文件记录?
我想我可以在item_milestone表中有file_id,并从item milestone链接回文件,而不是通过多态关系,但我会遇到同样的问题-在循环中,我只能访问pivot数据,除非我用另一个查询拉出来。
@foreach($item->milestones as $milestone)
{{File::where('fileable_type', 'App\Models\ItemMilestone')->where('fileable_id', $itemmilestone->id)->first()->filename}}
@endforeach
我使用文件模型将文件附加到各种其他模型(用户,项目等),这就是为什么我有多态关系。是否有最佳实践方法来做到这一点-或者我可能错过了一些东西(这是已知的)?!
1条答案
按热度按时间vulvrdjw1#
如果您在文件和其他模型之间有多态关系,并且当前在循环中访问文件的方法是功能性的,则可能导致潜在的性能问题,因为您正在为每个里程碑进行单独的查询以检索其关联的文件。
您可以使用Eager加载以更有效的方式检索所有相关文件。
和
查询
然后访问你的数据,