【问题标题】:Laravel Sorting Data with Relationship and PaginationLaravel 使用关系和分页对数据进行排序
【发布时间】:2018-08-18 09:09:08
【问题描述】:

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

我正在查询下面。

$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);

任何人都可以给我解决如何调整这个查询。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • $data = Lead::with('bdm', status_code',bdm.bdm')->sortByDesc('bdm.bdm.name')->paginate(20);你在搜索这个吗???
  • 我试过了,但不幸的是,它不起作用。
  • 您是否希望根据 bdm.bdm 的名称对潜在客户进行排序?因为它只会订购孙子关系。此外,我真的建议使用更具描述性的关系名称。

标签: laravel-5 eloquent relationship


【解决方案1】:

您应该使用join 语句来执行此操作。

如果我假设您的列名应该如下所示:

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

查询中的第一个bdm 参数是多余的。无论如何都会在bdm.bdm 期间处理。

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多