2つの方法があります。1つはtable.field
を指定する方法です。 、その他はEloquentエイリアスpivot_field
を使用します withPivot('field')
を使用する場合 :
// if you use withPivot
public function articles()
{
return $this->belongsToMany('Article', 'tops_has_posts')->withPivot('range');
}
// then: (with not whereHas)
$top = Top::with(['articles' => function ($q) {
$q->orderBy('pivot_range', 'asc');
}])->first(); // or get() or whatever
EloquentはwithPivot
で提供されるすべてのフィールドをエイリアスするため、これは機能します としてpivot_field_name
。
さて、一般的な解決策:
$top = Top::with(['articles' => function ($q) {
$q->orderBy('tops_has_posts.range', 'asc');
}])->first(); // or get() or whatever
// or:
$top = Top::first();
$articles = $top->articles()->orderBy('tops_has_posts.range', 'asc')->get();
これにより、関連するクエリが並べ替えられます。
注: このように名前を付けることであなたの人生を難しくしないでください。 posts
必ずしもarticles
ではありません 、本当に必要でない限り、どちらかの名前を使用します。