Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So bestellen Sie nach Pivot-Tabellendaten in Laravels Eloquent ORM

Es gibt 2 Möglichkeiten - eine mit Angabe von table.field , andere verwenden den Eloquent-Alias ​​pivot_field wenn Sie withPivot('field') verwenden :

// 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

Dies wird funktionieren, da Eloquent alle in withPivot bereitgestellten Felder mit einem Alias ​​belegt als pivot_field_name .

Nun, generische Lösung:

$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();

Dadurch wird die zugehörige Abfrage bestellt.

Hinweis: Machen Sie sich das Leben nicht schwer, wenn Sie Dinge auf diese Weise benennen. posts sind nicht unbedingt articles , würde ich entweder den einen oder den anderen Namen verwenden, es sei denn, es besteht wirklich Bedarf dafür.