Возвращать красноречивый результат только в том случае, если загруженное значение имеет значение? - PullRequest
0 голосов
/ 03 октября 2018

Что я хотел бы сделать, это получить список всех разговоров, которые имеют только последнее сообщение, и вернуть вывод JSON.

В разговоре есть много сообщений, но есть только одно последнее сообщение:

public function latestMessage()
{
    return $this->hasOne(Message::class)->latest();
}

Пользовательский модал

public function conversations()
{
    return $this->belongsToMany('App\Conversation','conversation_participants', 'user_id', 'conversation_id');
} 

ConversationsController

public function index()
{
    $user = Auth::user();

    $user_id = $user->id;

    $conversations = $user->conversations()->with(['latestMessage'

        //Gets conversations that aren't with the user signed in
        ,'participants' => function ($query) use ($user_id){
        $query->where('user_id', '!=' , $user_id);
    }])->orderBy('updated_at','desc')->take('20')->get();

    return $conversations;

}

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете попробовать:

$conversations = $user->conversations()
    ->has('latestMessage') // <-- limits results to conversations with a latestMessage
    ->with(['latestMessage','participants' => function ($query) use ($user_id) {
        $query->where('user_id', '!=' , $user_id);
    }])
    ->orderBy('updated_at','desc')
    ->take('20')
    ->get();

Вот соответствующий раздел документов:

https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence

...