Laravel:能否在Container类添加方法直接关联获取records?
可以实现,直接在Container模型中新增关联方法即可
当然可以,你只需要在Container模型中新增一个records关联方法,利用Laravel的hasManyThrough关联穿透多层关系(Container → Box → Letter → Record)。因为Box和Letter是一对一关联,我们可以把Box作为中间模型,直接关联到Record。
在你的Container模型中添加以下方法:
public function records() { return $this->hasManyThrough( Record::class, Box::class, 'container_id', // boxes表中关联containers的外键 'letter_id', // records表中关联letters的外键 'id', // containers表的主键 'letter_id' // boxes表中关联letters的外键 ); }
这个关联的逻辑是:
- 通过
container_id从containers关联到对应的boxes - 每个box通过
letter_id关联到唯一的letter - 最后通过letter的
id(对应records表的letter_id)关联到所有相关的records
现在你就可以直接使用Container::with('records')->get()来获取容器关联的所有records,无需再写嵌套的关联路径。
如果需要对records添加额外的查询约束,也可以在这个方法里直接追加:
public function records() { return $this->hasManyThrough( Record::class, Box::class, 'container_id', 'letter_id', 'id', 'letter_id' )->where('records.status', 'active'); // 示例:只获取状态为active的records }
内容的提问来源于stack exchange,提问作者DevonDahon
相关产品推荐
相关产品推荐

