Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment ordonner les données d'un tableau croisé dynamique dans l'ORM éloquent de Laravel

Il y a 2 façons - une avec la spécification de table.field , autre utilisant l'alias Eloquent pivot_field si vous utilisez 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

Cela fonctionnera, car Eloquent alias tous les champs fournis dans withPivot comme pivot_field_name .

Maintenant, solution générique :

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

Cela ordonnera la requête associée.

Remarque : Ne vous compliquez pas la vie en nommant les choses de cette façon. posts ne sont pas nécessairement des articles , j'utiliserais l'un ou l'autre nom, à moins que cela ne soit vraiment nécessaire.