@Analka

When в mysql запросе laravel?

как записать запрос в laravel
нужно вывести все мои диалоги если user_id = 1 или recipient_id= 1

таблица dialogs

id | user_id | recipient_id| status | ip

начал так, но не знаю как проверять мой id, если я могу быть отправителем user_id или получателем recipient_id

если dialogs.users_id = 1 (моему id), то users.id=dialogs.recipient_id
    если dialogs.recipient_id= 1(моему id), то users.id = dialogs.user_id


читал про when, но не могу понять как подставлять проверку c таблицей users

$dialogs = DB::table('dialogs')
                ->leftJoin('users',
                    when('dialogs.user_id','=', Auth::user()->id,function ($query){
                        return $query->where('users.id','=', 'dialogs.recipient_id');
                    })
                    ->when('dialogs.recipient_id','=', Auth::user()->id,function ($query){
                        return $query->where('users.id','=', 'dialogs.user_id');
                    })
                )
                ->leftJoin('user_attributes','user_attributes.user_id','=','users.id')->get();
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
Мне кажется, у вас неверно спроектирована база. Где у вас текст сообщения? В отдельно таблице? В таком случае получается что диалог инициированный А к Б и наоборот Б к А - это разные диалоги, что в реальной жизни (месенджерах) не так.
Ваша таблица должна иметь вид
id | user_id | recipient_id | message | timestamp
Это позволит вам простым способом выбрать все сообщения одного диалога, отсортировать их по времени и отобразить. Список собеседников тоже отобразить просто - это отношение многие-ко-многим между users и users (да, да!), где dialogs является pivot таблицей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы