为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 订单集合基于一对多关联关系的属性

Laravel 订单集合基于一对多关联关系的属性

PHP
萧十郎 2023-04-21 13:55:59
我有一个名为 Business 的模型(包含列描述、名称、视图等),它与模型“Rating”具有一对多关系。我想查询我的业务模型,以便它返回一个结果,检查名称或描述中是否存在搜索字符串,并首先按评级最高的业务排序,然后再查看业务。我已经为搜索查询编写了代码。在下面找到:$business = Business::with('images')    ->where('isActive', true)    ->where(function ($q) use ($query) {        $q->where('name', 'LIKE', '%' . $query . '%')            ->orWhere('description', 'LIKE', '%' . $query . '%');    })->get();我知道我可以像这样获取企业的平均评分:$averageRating = Rating::where('business_id', $id)->avg('rating');$business = Business::with(['images'])->get();foreach ($business as $item) {    $item["rating"] = floor($averageRating);}那么,我如何根据最高收视率排序,然后是最高浏览量?
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以使用子查询选择:


business = Business::with('images')

        ->where('isActive', true)

                    ->where(function ($q) use ($query){

                        $q->where('name', 'LIKE','%'.$query.'%')->orWhere('description', 'LIKE','%'.$query.'%');

                    })

->orderByDesc(['topRating' => Rating::select('rating')

    ->whereColumn('business_id', 'businesses.id')

    ->orderBy('rating', 'desc')

    ->limit(1)])

->get();

请确保设置业务表名称而不是“业务”

查看完整回答
反对 回复 2023-04-21
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

为此,您必须手动加入表格:


$business = Business::with('images')

    ->join('rating_table', 'rating_table.business_id', '=', 'business_table.id')

    ->where('isActive', true)

    ->where(function ($q) use ($query){

        $q->where('name', 'LIKE','%'.$query.'%')

            ->orWhere('description', 'LIKE','%'.$query.'%');

    })

    ->orderBy('rating_table.value', 'DESC')

    ->get();

经过多次尝试,无法使用 Eloquent 按他们的关系对“父”进行排序,您可以在关系内部进行排序,仅此而已。


查看完整回答
反对 回复 2023-04-21
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我相信你必须像这样使用连接:


$business = Business::select([

    'businesses.*', \DB::raw('AVG(ratings.rating) as avg_rating')

  ])

  ->join('ratings', 'businesses.id', '=', 'ratings.business_id')

  ->orderBy('ratings.avg_rating', 'DESC')

  ->get();

未测试


查看完整回答
反对 回复 2023-04-21
  • 3 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信