Laravel模型自关联查询异常:仅首条数据可获取同组数据
Laravel自关联返回空数组的问题排查与解决
问题原因
你定义的hasMany关联参数不正确。hasMany方法的第二个参数是关联模型的外键,第三个参数是当前模型的本地键。当前代码只传了第二个参数,Laravel会默认使用当前模型的id作为本地键进行关联匹配:
- 当获取id=1的Book时,它会查找
group_key = 1的记录(刚好数据库里都是group_key=1,所以返回3条) - 当获取id=2或3的Book时,它会查找
group_key = 2或group_key=3的记录,数据库里没有这类数据,所以返回空数组
解决方法
修改自关联方法,明确指定本地键为group_key,让关联基于同组的group_key进行匹配:
public function allGroupItems() { return $this->hasMany(self::class, 'group_key', 'group_key'); }
参数说明:
- 第一个参数:关联的模型类
self::class - 第二个参数:关联模型(Book)中用来匹配的外键字段
group_key - 第三个参数:当前模型中用来匹配的本地键字段
group_key
这样不管你获取哪一条Book记录,都会返回所有group_key与当前记录相同的条目。
内容的提问来源于stack exchange,提问作者autumnrustle
相关产品推荐
相关产品推荐

