Laravel 中另一个 table 的 orderBy 属性

orderBy attributes of another table in Laravel

在我的网站上,我允许用户上传 images/like images/favorite images/etc.

因此,我有一个 table 用于图像、喜欢、收藏夹等

我可以很好地获取和显示这些图像,并根据需要对它们进行排序

$images = Images::orderBy('id', 'desc')->Paginate(50);  

我还可以显示图像有多少likes/favorites。

$favCount = Favorite::where('image_id', $image->id)->count();

但是,我该怎么做才能根据收藏夹数量对图像进行排序?我有一个最喜欢的模型和一个图像模型,但我不确定我会怎么做。

编辑:

当前查询给出的答案:

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id')
->select('images.link', DB::raw('count(favorites.id) as favs'))
->orderBy('favs', 'desc')
->groupBy('images.link')
->take(10)
->get();        

错误是:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'images' in 'field list' (SQL: select images, count(favorites.id) as favs from images inner join favorites on favorites.image_id = images.id group by images.link order by favs desc limit 10)

您可以像这样使用查询生成器:

$images = DB::table('images')
->join('favorites', 'favorites.image_id', '=', 'images.id')
->select('images.link', DB::raw('count(favourites.id) as favs'))
->orderBy('favs', 'desc') //order in descending order
->groupBy('images.link')
->take(10) //limit the images to Top 10 favorite images.
->get();

同样可以用 Eloquent 来完成。

您的查询应该是。

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id')
->orderBy('favs', 'desc')
->groupBy('images.link')
->take(10)
->get(['images.link', DB::raw('count(favorites.id) as favs')]);