как объединиться и сгруппироваться в laravel - PullRequest
0 голосов
/ 25 января 2020

Я хочу получить идентификатор контакта, который отправил чат или я отправил ему чат с собственным запросом, я могу получить результат, но когда я внедряю в laravel, это становится сложным, это мой собственный запрос

select * from `users` where `users`.`id` in (
    select `to` from messages where `from` = 2 group by `to`
    union
    select `from` from messages where `to` = 2 group by `from`
    )

то, что я нахожу трудным, это то, как объединение за группой или группа за объединением с одинаковым номером столбца, я использую слияние, но результат неправильный, что я пробовал в laravel

$to = Message::select('to')->where('from',auth()->id())->groupBy('to')->get();
$from = Message::select('from')->where('to',auth()->id())->groupBy('from')->get();

$tofrom = $to->merge($from);
dd($tofrom);

, пожалуйста, если любое тело может помочь

Ответы [ 3 ]

0 голосов
/ 25 января 2020

Союзы описаны в документации . Чтобы выполнить ваши конкретные c требования, вы можете сделать:

$final = User::whereIn('id', function ($query) {
    $from = Message::select('from')->where('from',auth()->id())->groupBy('from');
    $query->from('messages')->where('to',auth()->id())->groupBy('to')->union($from);
})->get();

Отказ от ответственности: Я на самом деле не проверял это, но я думаю, что это должно работать.

0 голосов
/ 26 января 2020

о, наконец, я получил ответ, это код

$contacts = User::select('users.id','users.name','users.email','users.profile_image')
            ->join('messages',function($join){
                $join->on('users.id','messages.from');
                $join->orOn('users.id','messages.to');
                })
            ->where(function($query){
                $query->where('messages.from',auth()->id())->orWhere('messages.to',auth()->id());         
                })
            ->groupBy('users.id','users.name','users.email','users.profile_image')
            ->get();
0 голосов
/ 25 января 2020

merge() - это метод сбора. Не Eloquent Builder или Query Builder.

Однако, он думает, что вы хотите найти user.id в массиве.

Вы можете преобразовать коллекцию в массив:

$to = Message::where('from',auth()->id())->groupBy('to')->pluck('to');
$from = Message::where('to',auth()->id())->groupBy('from')->pluck('from');
$tofrom = $to->merge($from)->toarray();

User::whereIn('id', $tofrom)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...