Laravel Eloquent: сортировка таблицы по сумме двух таблиц

#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();