我有一个问题需要帮助。我正在学习一个项目。
我有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。
非常感谢!
答案 0 :(得分:1)
您可以在用户和朋友表之间形成hasMany()关系
在用户模型中你必须写
public function friends() {
return $this->hasMany('Friend','user_a');
}
并从数据库中获取数据。
$user = User::with('friends')->find($userId);
使用预先加载,您可以获得当前登录用户的所有朋友。
这是laravel
中关系的链接答案 1 :(得分:0)
这是多对多的关系,因此您需要belongsToMany
。
// basic setup
public function friends()
{
return $this->belongsToMany('User', 'friends', 'user_a', 'user_b')
->withPivot('confirmed');
}
然而,并非全部,因为您希望它是双向的。这意味着您需要设置2个关系 - 在这里您可以找到确切的解决方案:
答案 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