Laravel 远程一对多关系,中间表模型和关联模型不能是同一个模型
表结构如下:
用户- users: id,
回复- replies: id, user_id, parent_id,
parent_id 是这条回复所回复的回复对象的id。
user_id 是这条回复的用户id。
现在想取得id为1的用户所有给他的回复所有回复。这样就构成了远程一对多的关系。
User中:
public function receivedReplies()
{
return $this->hasManyThrough(Reply::class, Reply::class, 'user_id', 'parent_id');
}
远程一对多的关系定义没有问题。但是,远程一对多中中间表和关联表一样,生成sql语句中的jion没有重命名表,导致两个同表名冲突。报的错误如下:
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'replies' (SQL: select count(*) as aggregate from `replies` inner join `replies` on `replies`.`id` = `replies`.`parent_id` where `replies`.`user_id` = 1 and `user_id` <> 1)
请问这种问题有好的解决办法吗?
这问题无解,有人在github 提这个问题。最后还是自己构造sql。
我也碰到没有重命名表的问题,无解
分两次去查吧!
一个用户有多条回复,一条回复又有多条回复!
User:
Reply:
Controller:
大概思路,我没具体试过!!
重新构造表吧, 一级回复用comments 二级回复用replies. 你这个属于可以无限嵌套的模式, 比如user1回复的回复的回复, 算不算给user1的呢?