Eloquent - 使用Union来组合两个对称关系会引发错误

时间:2016-04-15 02:53:35

标签: sql laravel eloquent

我通过数据透视表在用户之间建立了多对多关系作为朋友。他们必须在数据透视表(friends),user_from_iduser_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)

所以它看起来很接近,但我遗漏了一些必不可少的东西。任何见解?

由于

0 个答案:

没有答案