当前位置: 首页 > 知识库问答 >
问题:

Laravel Orderby不在雄辩的地方工作有关系吗?

长孙鸿波
2023-03-14

请查看下面的代码。

 $serviceNew = CompletedService::selectRaw('gallons_collected as total,account_id,id,service_provider_id,service_id,service_date')
            ->where("service_id", '1')->where('service_provider_id', $service_privider_id)->whereMonth('service_date', $month)->whereYear('service_date', $year)
            ->with('account')
            ->whereHas('account', function($qs) {
                $qs->orderBy('restaurant_name', 'DESC');
            })
            ->get();

我在“CompletedService”中有多条记录,并且在account表中有一个父id account\u id。我和你约会是为了钱。

ASC和DESC已经尝试过了。

尝试按whereHas排序,但不会影响任何记录。下面是模型关系。

 public function account() {
    return $this->hasOne('App\Account', 'id', 'account_id');
}

我不需要在模型中使用orderby,因为我多次使用了这个关系,并且在这个查询中只需要orderby。

与一个已完成的服务记录关系只有一个账户。所以基本上我需要在帐户字段上对已完成的服务记录进行排序。

桌子

完整服务

|id| account_id|service_id|service_provider_id|gallons_collected|service_date
|1 | 2         | 1        | 9                 | 50              | 2017-08-29

账户

| id | restaurant_name|

每一个帮助将不胜感激。提前感谢。!

共有3个答案

佘辰龙
2023-03-14

用于根据关系的存在来限制结果。

见:https://laravel.com/docs/5.4/eloquent-relationships#querying-关系存在

使用以下代码添加CONSTRAINT in关系:

$serviceNew = CompletedService::selectRaw('gallons_collected as total,account_id,id,service_provider_id,service_id,service_date')
        ->where("service_id", '1')->where('service_provider_id', $service_privider_id)->whereMonth('service_date', $month)->whereYear('service_date', $year)
        ->with(['account' => function($qs) {
            $qs->orderBy('restaurant_name', 'DESC'); 
        }])->get();

见:https://laravel.com/docs/5.4/eloquent-relationships#constraining-eager-loads

东郭瀚玥
2023-03-14

orderBy()在查询中没有作用;您需要将orderBy()逻辑移动到带有()语句的中:

$serviceNew = CompletedService::selectRaw('gallons_collected as total,account_id,id,service_provider_id,service_id,service_date')
  ->where("service_id", '1')
  ->where('service_provider_id', $service_privider_id)
  ->whereMonth('service_date', $month)
  ->whereYear('service_date', $year)
  ->with(['account' => function($qs){
    $qs->orderBy('restaurant_name', 'DESC');
  })->has('account')->get();

编辑:上面是按餐厅名称对每个已完成服务帐户记录进行排序,但没有完成任何操作。要按所有CompletedService模型的帐户餐厅名称列对其进行排序,您需要一个join()子句:

$newService = CompletedService::selectRaw('gallons_collected as total,account_id,id,service_provider_id,service_id,service_date')
->where('service_id', '1')
->where('service_provider_id', $service_privider_id)
->whereMonth('service_date', $month)
->whereYear('service_date', $year)
->join('accounts', 'accounts.id', '=', 'completed_services.account_id')
->orderBy('accounts.restaurant_name');

您应该不再需要带有()子句的,但是如果没有关系,使用have()可以确保您不会得到null值。

华景明
2023-03-14

您需要为此使用替代解决方案。首先,您需要获取数据/收集,然后需要应用订单。

Laravel提供了一些函数,使用这些函数可以对您的集合进行排序。

https://laravel.com/docs/5.6/collections#method-sortby

使用sortByDesc(用于降序)。下面是您的代码:

$serviceNew = CompletedService::selectRaw('gallons_collected as total,account_id,id,service_provider_id,service_id,service_date')
            ->where("service_id", '1')->where('service_provider_id', $service_privider_id)->whereMonth('service_date', $month)->whereYear('service_date', $year)
            ->with('account')
            ->whereHas('account')
            ->get()
            ->sortByDesc('account.restaurant_name');
 类似资料:
  • 我有一个表事务与复合主键id,Nom,日期和一个表Cour与Nom作为主键和一个事务有关一个Cour。 我怎样才能得到一个有口才关系的特定交易的课程?

  • 我试着补充: 并用调用,但响应为空。

  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我在我的Laravel项目中与雄辩的关系作斗争。 我的数据库中有一个“用户”表和一个“用户行”表。“用户行”表中有一个“用户id”字段,该字段与“用户”中的“id”字段相对应,属于典型的主-明细关系。 用户模型与用户线模型有很多关系。UserLine模型与用户模型具有belongsTo关系。 在我的应用程序中,我有一个包含多个用户行的用户表单。在表单提交期间,可以添加、更改或删除这些用户行。到目前

  • 我正在构建一个客户端应用程序,它需要在服务器API响应中包含相关模型的ID。 在我的例子中,我有两个模型,一个Post和一个Tag模型。它们之间的关系是多对多的,所以需要一个数据透视表。 我在路径上设置了一个resourcefull控制器,如下所示: 这将返回一个非常像这样的响应: 我要寻找的是一种在响应中包含相关标签模型ID的简单方法,如下所示:

  • 我有两个模型。模型有一个(关系)。 关于模型,我有以下关系: