Laravel使用关系和分页对数据进行排序

时间:2018-08-18 09:09:08

标签: laravel-5 eloquent relationship

我需要根据“关系”对“记录”数据进行排序。

我正在尝试查询以下内容。

$data = Lead::with('bdm', 'status_code', 'bdm.bdm')->get()->sortByDesc('bdm.bdm.name');

它工作正常,但我需要带有分页的数据,默认情况下,Laravel 5会提供该数据。

因此,如果我尝试使用以下查询。它给出了错误。

$data = Lead::with('bdm', 'status_code', 'bdm.bdm')->pagination(20)->sortByDesc('bdm.bdm.name');

我正在尝试另一种方式来执行相同的任务。它工作正常,但未对记录进行排序。

$data =  Lead::with(['bdm','status_code', 'bdm.bdm' => function ($query) {
            $query->orderBy('name', 'desc');
        }])->paginate(20);

因此,任何人都可以给我解决方案,以调整该查询。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用join语句来做到这一点。

如果我假设您使用列名,那么它应该看起来像这样:

$data =  Lead::with(['status_code', 'bdm.bdm'])
             ->join('bdms', 'bdms.id', '=', 'leads.bdm_id')
             ->orderBy('bdms.name', 'desc')
             ->paginate(20);

查询中的第一个bdm参数是多余的。无论如何,它将在bdm.bdm期间进行处理。