在Eloquent中按键排序

时间:2018-03-22 21:01:01

标签: laravel laravel-5 eloquent laravel-eloquent

这是我的Matrix型号:

Matrix  ->   Finding   ->    Norm   ->    Normtype
          (finding_id)     (norm_id)   (normtype_id)

我想要获取Matrixes,首先按finding_id排序,然后按normtype_id排序。

根据我的阅读,orderBy仅适用于实际模型中的键,例如:

public function findings() {
    return $this->hasMany('App\Finding')->orderBy('finding_id');
}

我怎样才能在Eloquent中做到这一点?

只是澄清一下,matrix有多个findings,每个finding属于norm,每个norm都有一个normtype }。

1 个答案:

答案 0 :(得分:0)

当您对关系定义进行orderBy调用时,您只会更改相关模型的排序方式。如果您想按相关模型的属性进行排序,则需要自己构建正确的连接。

以下情况应该可以解决您的问题:

Matrix::join('findings', 'finding_id', 'findings.id')
  ->join('norms', 'findings.norm_id', 'norms.id)
  ->orderByRaw('finding_id, norms.normtype_id')
  ->get();