#laravel #eloquent #eloquent-relationship
#laravel #eloquent #eloquent-связь
Вопрос:
Я пытаюсь упорядочить по полю отношений следующим образом:
Post::with(['comments' => function($query) {
$query->orderBy('some_comment_field', 'desc');
}]);
Но это не работает. Как я могу это сделать?
Я использую Laravel 5.8.
Ответ №1:
если вы хотите упорядочить по полям комментариев, вам следует добавить его в основной выбор с помощью объединения:
Post::with(['comments'])->join('comments','posts.id','comments.post_id')
->select(['posts.*','comments.some_comment_field'])
->orderby('comments.some_comment_field', 'desc')->get();
вы можете опустить комментарии, требующие загрузки, и выбрать нужное поле комментариев. Вы также можете использовать псевдонимы, чтобы получить четкие имена столбцов
Ответ №2:
Пример 1
// in post model
public function comments()
{
return $this->hasMany('AppComment', 'post_id', 'id');
}
// in post controller
Post::with(['comments' => function($query) {
$query->orderBy('date', 'desc');
}])->get();
Пример 2
// in post model
public function comments()
{
return $this->hasMany('AppComment', 'post_id', 'id')
->orderBy('date', 'desc');
}
// in post controller
Post::with('comments')->get();