Получить сообщения, которые недавно были прокомментированы - PullRequest
0 голосов
/ 02 февраля 2020

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

У меня есть Post модель с этим отношением

public function comments(){
        return $this->morphMany(Comment::class, 'commentable');
    }

и c Comment модель с этим отношением:

public function commentable()
{
    return $this->morphTo();
}

Я пытаюсь вернуть последнее сообщение из представления composer с:

public function compose(View $view)
{
    $view->with(['latestCommentedPost' =>
       $this->post->select(['title', 'slug'])->with(['comments' => function($q){
            return $q->latest()->take(6)->get();
        }])
    ]);
}

Но $latestCommentedPost пусто ??

Ожидаемый результат

Получить 6 постов с самыми последними комментариями.

1 Ответ

1 голос
/ 02 февраля 2020

Для сортировки по самым последним комментариям необходимо использовать таблицу created_at из commentable или comments. Они из разных таблиц.

Вам нужно присоединиться к commenttable, который имеет максимум created_at, чтобы вы могли отсортировать по последним комментариям.

public function compose(View $view)
{
    $view->with(['latestCommentedPost' =>
       $this->post->select(['posts.title', 'posts.slug'])
        ->leftjoin('commentable', function($join) {
            $join->on('commentable.commentable_id', '=', 'posts.id')
                 ->where('commentable.commentable_type', 'App\Post')
                 ->latest()->limit(1);
        })->latest('commentable.created_at')
        ->take(6)
        ->with(['comments' => function($q){
            return $q->latest()->take(6)->get();
        }])->get()
    ]);
}
...