我通过数据透视表在用户之间建立了多对多关系作为朋友。他们必须在数据透视表(friends
),user_from_id
,user_to_id
中使用不同的外键。
在User模型中,我定义了两个关系:
public function friends_from() {
return $this->belongsToMany('App\User,'friends',
'user_from_id`, `user_to_id`);
}
...和friends_to
对称,效果很好。
但它仍然难以巩固所有“我的朋友。我认为我发现了一种非常聪明的方法,通过将它们组合成”朋友“方法并仍然有一个建造者,试图做两种关系方法的联合:
public function friends() {
return $this->friends_to()->unionAll($this->friends_from());
}
但是这会产生一个SQL异常:
Cardinality violation: 1222 The used SELECT statements have a different number of columns
SQL:
select
`users`.*, `friends`.`user_from_id` as `pivot_user_from_id`,
`friends.user_to_id` as `pivot_user_to_id`
from `users`
inner join `friends`
on `users`.`id` = `friends`.`user_to_id`
where `friends`.`user_from_id` = 245)
union all
(select * from `users` inner join `friends`
on `users`.`id` = `friends`.`user_from_id`
where `friends`.`user_to_id` = 245)
所以它看起来很接近,但我遗漏了一些必不可少的东西。任何见解?
由于