Laravel不同的联接基于何处

时间:2016-03-14 12:56:51

标签: php laravel

所以基本上我要做的就是抓住所有朋友给一个给定的用户,但不抓住给定的用户本身,只抓住朋友。但是当我需要根据其位置进行不同的连接时,我会陷入困境。例如:

如果给定用户等于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();

我该怎么做?

包含所有友谊的我的数据库表如下所示: enter image description here

1 个答案:

答案 0 :(得分:0)

基本上,我可以通过两种方式完成此操作:每当有人接受好友请求时,会发布两行user_sender_id = frienduser_id_receiver = you以及下一行time user_sender_id = youuser_id_receiver = ur friend接下来有两个问题。