如何在 Laravel 的嵌套 2 级关系中按列排序?
Posted
技术标签:
【中文标题】如何在 Laravel 的嵌套 2 级关系中按列排序?【英文标题】:How to order by column in nested 2 level relationship in Laravel? 【发布时间】:2019-08-29 05:00:43 【问题描述】:我有 3 个表:reports
、fields
和 report_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 级关系中按列排序?的主要内容,如果未能解决你的问题,请参考以下文章