#php #mysql #laravel #eloquent #sql-order-by
#php #mysql #laravel #eloquent #sql-order-by
Вопрос:
У меня есть таблица продуктов, комментариев и дочерних комментариев.
Products.php режим
public function comments()
{
return $this->morphMany('AppModelsComment', 'commentable')->orderBy('id');
}
Comment.php модель
public function children()
{
return $this->hasMany('AppModelsChildComment');
}
Теперь моя цель — выполнить запрос eloquent, который возвращает мне таблицу продуктов, но упорядоченную по comments_count
child_comments_count
.
На данный момент именно так я получаю свой totalCommentsCount
атрибут. Я знаю, что это не идеально, но я не знаю, как сделать это лучше… Также я не могу упорядочить запрос eloquent по этому атрибуту, потому что на данный момент запрос уже выполнен:
public function getCommentsAndChildrenCountAttribute(){
$comments = $this->comments()->with('children')->withCount('children')->get();
$count = 0;
foreach($comments as $comment){
$count = $comment->children_count 1;
}
return $count;
}
У кого-нибудь есть идея, как это сделать?
Ответ №1:
Может быть, этот код выполняет эту работу?
Product::withCount([
'comments as count_comments',
'comments.children as comments_count_children'
])->orderByRaw('count_comments comments_count_children desc')->get();