php Laravel中另一个表的orderBy属性

gc0ot86w  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(113)

在我的网站上,我允许用户上传图像/喜欢的图像/最喜欢的图像/等。
因此,我有一个表的图像,喜欢,收藏夹等。
我可以很好地获取和显示这些图像,并按我喜欢的方式对它们进行排序

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

我还可以显示一张图片有多少喜欢/收藏。

$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]:未找到列:1054 Unknown column 'images' in 'field list'(SQL:select images,count(favorites.id)as favs from images inner join favorites on favorites . image_id = imagesidimages分组。link order by favs desc limit 10)

at0kjp5o

at0kjp5o1#

你可以这样使用query builder:

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

0dxa2lsx

0dxa2lsx2#

您的查询应该是。

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

btqmn9zl3#

可以根据请求进行排序。

if($request->sort){
         $events->join('event_packages', 'event_packages.ev_event_id', '=', 'ev_events.id')
            ->select('ev_events.*', DB::raw('min(event_packages.price_per_ticket) as price_per_ticket'))
            ->groupBy('ev_events.id');
            if($request->sort == 1){
                $events->orderBy('price_per_ticket', 'asc');
            }else{
                $events->orderBy('price_per_ticket', 'desc');
            }
    }else{
        $events->orderBy('id','desc');
    }

相关问题