如何在Laravel Eloquent中按第三表字段排序关联文档集合?
解决Laravel Eloquent多字段关联排序问题
方案一:查询时指定关联排序
直接在获取供应商文档的查询链中,关联document_types表并设置排序规则,同时明确选择documents表字段避免冲突:
// 示例:获取ID为$supplierId的供应商文档 $supplierDocuments = Supplier::find($supplierId)->documents() ->join('document_types', 'documents.document_type_id', '=', 'document_types.id') ->orderBy('document_types.name', 'asc') // 按文档类型名称升序,可改为desc降序 ->orderBy('documents.upload_date', 'desc') // 再按上传日期排序,按需调整顺序 ->select('documents.*') // 仅选择documents表字段,防止同名字段冲突 ->get();
方案二:修改关联定义实现默认排序
如果需要每次获取供应商文档都自动应用该排序规则,可修改Supplier模型中的documents关联方法:
// Supplier模型文件 public function documents() { return $this->hasMany(Document::class) ->join('document_types', 'documents.document_type_id', '=', 'document_types.id') ->orderBy('document_types.name') ->orderBy('documents.upload_date') ->select('documents.*'); }
之后直接调用$supplier->documents就能得到已按规则排序的文档集合。
注意事项
- 确保表名拼写与项目实际一致(你提供的表名是
Supliers,实际项目中可能为Suppliers,需对应调整) - 排序方向(
asc/desc)可根据业务需求自行修改 - 必须添加
select('documents.*'),避免document_types与documents表出现同名字段时的查询冲突
内容的提问来源于stack exchange,提问作者Nacho Fernandez
相关产品推荐
相关产品推荐

