在Laravel中另一个表的orderBy属性

时间:2017-01-22 23:56:41

标签: php laravel

在我的网站上,我允许用户上传图片/喜欢的图片/喜欢的图片等等。

因此,我有一张图片,喜欢,收藏等表格。

我可以很好地显示这些图像,然后按照我喜欢的方式对它们进行排序

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

但是,我会怎样对图像进行排序,比方说,它们有多少收藏?我有一个最喜欢的模型和图像模型,但我不确定我会怎么做。

编辑:

给出答案的当前查询:

images

错误是:

  

SQLSTATE [42S22]:未找到列:1054未知列'图像'在'字段列表' (SQL:选择images,将count(favorites.id)作为favorites favorites image_id images上的id内的收藏夹。images = linkfavs {{1}}分组{{1}}按{{1}} desc限制排序10)

2 个答案:

答案 0 :(得分:2)

您的查询应该是。

$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')]); 

答案 1 :(得分:1)

您可以像这样使用查询构建器:

$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完成。