Так что в основном я пытаюсь захватить всех друзей для данного пользователя, но не захватить данного пользователя, а только друзей. Но я застрял, когда мне нужно было иметь разные объединения, основываясь на том, где. Пример: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();
Как бы это сделать?
Моя таблица базы данных, которая содержит все дружеские отношения выглядит следующим образом:
отправить с полным сообщением об ошибке –
О, это не сообщение об ошибке. Он работает для одного пользователя, но не для другого. Я могу видеть администратора как друзей, как у администратора, так и у пользователя. И я должен видеть администратора как друга на пользователе, а пользователь как друга на admin. Это не работает в обоих направлениях. Я получаю тот же результат, если '$ user_id' равен 1 или 2. – Kaizokupuffball
ваш код слишком грязный, просто поместите таблицу базы данных ur вместе с внешним ключом и позвольте мне решить –