如何在 Laravel 的嵌套 2 级关系中按列排序?

Posted

技术标签:

【中文标题】如何在 Laravel 的嵌套 2 级关系中按列排序?【英文标题】:How to order by column in nested 2 level relationship in Laravel? 【发布时间】:2019-08-29 05:00:43 【问题描述】:

我有 3 个表:reportsfieldsreport_fields,这是其他 2 个表之间的枢纽。我需要做的是在 field 表中按位置 column 订购 report_field.field .

我尝试在Models 或使用with 的关系中进行排序,但我可能做错了。 例如:

$query = Report::with([ 'reportFields.field' => function ($q) 
    $q->orderBy('position', 'asc');
    //$q->orderByRaw("fields.position DESC");
,

有人可以举一个订购 2 级嵌套关系的基本示例吗?

编辑:我不需要按基表中的任何列排序,而是按第二个表中的列对数据透视表中的条目列表进行排序。

编辑2:

举个例子,输出应该如何排序:

Report
    ReportField
        Field.position = 1
    ReportField
        Field.position = 2
    ReportField
        Field.position = 3

【问题讨论】:

How to Use Order By for Multiple Columns in Laravel 4?的可能重复 不是一回事。问题是按嵌套关系按 2 级排序。您指定的链接是关于在单个表中按 2 列排序。 尝试在你的模型中使用槽关系laravel.com/docs/5.8/eloquent-relationships#has-many-through 我需要访问“数据透视”表 report_fied 以获取该报告独有的其他表字段,因此我无法使用标准的 hasManyThrough。关系是使用 belongsTo/hasMany 建立的。 【参考方案1】:

您可以在第一张表reports的关系上添加您需要的排序:

public function reportFields()

    return $this->hasMany(ReportFields::class)
        ->select('report_fields.*')
        ->join('fields', 'report_fields.field_id', 'fields.id')
        ->orderBy('fields.position', 'asc');

【讨论】:

以上是关于如何在 Laravel 的嵌套 2 级关系中按列排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ExtJS 中按列类型设置默认列渲染器?

在laravel中按模型从数据库中获取数据时如何附加关系

如何在laravel中按类别过滤帖子?

如何在 Pandas 数据框中按列值分组

如何在 Hive 中按列分组使用聚合函数

如何使用 R 在 csv 文件中按列添加数据?