【问题标题】:Laravel eloquent order by subqueryLaravel 雄辩的子查询顺序
【发布时间】:2019-06-10 07:33:21
【问题描述】:

我在子查询(姓氏,名字)中按列排序时遇到问题。

我已经按照其他帖子的建议尝试了此代码:

->with(['customer' => function ($query) {
            $query->orderBy("lastname", "asc")
                ->orderBy("firstname", "asc");
        }])

这是我的完整代码,但它不起作用。

return Membership::forCompany($companyId)
        ->whereIn('state', ['ATTIVA', 'IN ATTESA DI ESITO', 'DA INVIARE'])
        ->where(function ($query) {
            $query->where('end_date', '>=', Carbon::now()->toDateString())
                ->orWhereNull('end_date');
        })
        ->with('federation')
        ->with(['customer' => function ($query) {
            $query->orderBy("lastname", "asc")
                ->orderBy("firstname", "asc");
        }]);

这里的关系:

在客户模型中我有:

public function memberships() {
   return $this->hasMany('App\Models\Membership');
}

在会员模型中我有:

public function customer() {
    return $this->belongsTo("App\Models\Customer");
}

【问题讨论】:

  • 您不能通过它的子查询对结果应用订单。这是完全错误的做法。 Order by 可以与连接一起使用。如果您想在上述情况下申请order by...您应该从客户表中查询。
  • 感谢@VikashPathak,但我有时需要按姓氏(客户表)订购,有时需要按 end_date(会员表)订购。我该如何解决这个迷宫?
  • 请分享关系。
  • 我在原始帖子中添加了关系。谢谢:)

标签: laravel eloquent sql-order-by


【解决方案1】:

试试orderBy()join() 喜欢:

$memberships = \DB::table("memberships")
                    ->where("company_id", $companyId)
                    ->where(function ($query) {
                        $query->where('end_date', '>=', Carbon::now()->toDateString())
                            ->orWhereNull('end_date');
                    })
                    ->join("customers", "memberships.customer_id", "customers.id")
                    ->select("customers.*", "memberships.*")
                    ->orderBy("customers.lastname", "asc")
                    ->get();

dd($memberships);

如果您仍有问题,请告诉我。注意,代码未经测试!所以你可能需要自己验证一次。

【讨论】:

  • @Swim89 这有帮助吗?
猜你喜欢
  • 2018-04-05
  • 2018-01-26
  • 2021-07-23
  • 2017-11-11
  • 2013-02-02
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多