所以基本上我要做的就是抓住所有朋友给一个给定的用户,但不抓住给定的用户本身,只抓住朋友。但是当我需要根据其位置进行不同的连接时,我会陷入困境。例如:
如果给定用户等于user_id_sender
,我希望在user_id_receiver
上加入表格。反过来说。
我想出了这个:
DB::table('friends') -> where('friends.user_id_sender', $user_id)
-> orWhere('friends.user_id_receiver', $user_id)
-> join('profiles as profile_receiver', 'profile_receiver.user_id', '=', 'friends.user_id_sender')
-> join('profiles as profile_sender', 'profile_sender.user_id', '=', 'friends.user_id_receiver')
-> join('users as receiver', 'receiver.id', '=', 'friends.user_id_sender')
-> join('users as sender', 'sender.id', '=', 'friends.user_id_receiver')
-> select('receiver.name', 'receiver.id', 'profile_receiver.picture', 'sender.name', 'sender.id', 'profile_sender.picture', 'sender.last_seen', 'receiver.last_seen')
-> get();
我目前只有2个用户(管理员和用户)。如果我尝试查看管理员的朋友,我会看到管理员(这是不对的,我希望在管理员朋友和管理员用户朋友上看到用户)。
我也尝试在where子句中使用连接,但我发现这不起作用。我可以这样做两个查询,但我只想查询1个:
$friends1 = DB::table('friends') -> where('friends.user_id_sender', $user_id)
-> join('profiles', 'profiles.user_id', '=', 'friends.user_id_receiver')
-> join('users', 'users.id', '=', 'friends.user_id_receiver')
-> select('users.name', 'profiles.picture', 'users.id')
-> get();
$friends2 = DB::table('friends') -> where('friends.user_id_receiver', $user_id)
-> join('profiles', 'profiles.user_id', '=', 'friends.user_id_sender')
-> join('users', 'users.id', '=', 'friends.user_id_sender')
-> select('users.name', 'profiles.picture', 'users.id')
-> get();
我该怎么做?
答案 0 :(得分:0)
基本上,我可以通过两种方式完成此操作:每当有人接受好友请求时,会发布两行user_sender_id = friend
和user_id_receiver = you
以及下一行time user_sender_id = you
和user_id_receiver = ur friend
接下来有两个问题。