Laravel Eloquent - 表加入

时间:2014-09-10 13:55:23

标签: php mysql laravel laravel-4

我有一个问题需要帮助。我正在学习一个项目。

我有2张桌子,第一张是

USERS ,其中包含ID(PK,AI),用户名,电子邮件,密码等...

另一个名为

的表

FRIENDS

包含user_a(FK到users.id),user_b(FK到users.id),状态(0 - 待定,1 - 确认)...

让我们说当前登录的用户有id 1。

我需要加入这2个表并获取当前登录用户的完整好友列表,因此查询表朋友,其中user_a或user_b =当前登录的用户ID,并从他的朋友那里获取所有数据(来自表用户)...所以我们这样说:

user_a = 1,user_b = 2 userb_a = 3,user_b = 1

我需要获取用户2,3的信息。

我希望你明白我的需要。

顺便说一句,我知道如何在不使用Eloquent的情况下做到这一点,但我需要使用Eloquent。

非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以在用户和朋友表之间形成hasMany()关系

在用户模型中你必须写

public function friends() {
  return $this->hasMany('Friend','user_a');
}

并从数据库中获取数据。

$user = User::with('friends')->find($userId);

使用预先加载,您可以获得当前登录用户的所有朋友。

这是laravel

中关系的链接

http://laravel.com/docs/eloquent#relationships

答案 1 :(得分:0)

这是多对多的关系,因此您需要belongsToMany

// basic setup
public function friends()
{
    return $this->belongsToMany('User', 'friends', 'user_a', 'user_b')
      ->withPivot('confirmed');
}

然而,并非全部,因为您希望它是双向的。这意味着您需要设置2个关系 - 在这里您可以找到确切的解决方案:

Friendship system with Laravel : Many to Many relationship

答案 2 :(得分:-1)

试一试。如果应该给你想要你想要的。如果需要,请添加ID和电子邮件。

select u.username, f.status, uf.username as friendname
from users u
join friends f on
  f.user_a = u.id or f.user_b = u.id
join users uf on
  uf.id = f.user_a or uf.id = f.user_b
  and uf.id != u.id