如何在Laravel关系中实现SUM()?

时间:2018-02-25 20:12:32

标签: php mysql laravel orm relationship

这是我的查询也有效:

SELECT sum(r.rating) as rank,b.* FROM books as b
LEFT JOIN ranks as r ON b.id = r.book_id
WHERE 1
GROUP BY (b.id)
ORDER BY rank DESC

现在我想在Laravel做同样的事情。这是我尝试过的:

// Book model
class Book extends Model
{
    public function ranks()
    {
        return $this->hasMany(Rank::class)->sum("rating");
    }
}

// Controller
$obj = new Book;
$get = $obj->ranks()->orderBy('rating', 'desc')->get();

它抛出了这个错误:

  

在整数

上调用成员函数groupBy()

我知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

public function ranks() {
    return $this->hasMany(Rank::class)
        ->select('book_id', \DB::raw('sum(`rating`) as `rank`'))
        ->groupBy('book_id');
}

$books = Book::with('ranks')->get();
$sortedBooks = $books->sortByDesc(function($book) {
    return $book->ranks->sum('rank');
});