首页 > 解决方案 > Laravel 雄辩的子查询顺序

问题描述

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

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

->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");
}

标签: laraveleloquentsql-order-by

解决方案


尝试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);

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


推荐阅读