2016-03-14 2 views
0

Так что в основном я пытаюсь захватить всех друзей для данного пользователя, но не захватить данного пользователя, а только друзей. Но я застрял, когда мне нужно было иметь разные объединения, основываясь на том, где. Пример: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 пользователей в настоящее время (администратора и пользователя). Если я попытаюсь просмотреть друзей администратора, я вижу администратора (и это не правильно, я хотел бы видеть, что пользователь по администраторам и администраторам друзей пользователя).

Я также попытался использовать соединения внутри где предложения, но я узнал, что это не работает. Я мог бы сделать два запроса, например, но мне хотелось бы только 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

+0

отправить с полным сообщением об ошибке –

+0

О, это не сообщение об ошибке. Он работает для одного пользователя, но не для другого. Я могу видеть администратора как друзей, как у администратора, так и у пользователя. И я должен видеть администратора как друга на пользователе, а пользователь как друга на admin. Это не работает в обоих направлениях. Я получаю тот же результат, если '$ user_id' равен 1 или 2. – Kaizokupuffball

+0

ваш код слишком грязный, просто поместите таблицу базы данных ur вместе с внешним ключом и позвольте мне решить –

ответ

0

В основном есть два способа это может мне сделали это всякий раз, когда кто-то принимает запрос на друга проводки две строки, которые он когда-то user_sender_id = friend и user_id_receiver = you и рядом time user_sender_id = you и user_id_receiver = ur friend, а затем два запроса.

Смежные вопросы