Mysql
 sql >> Database >  >> RDS >> Mysql

Come ordinare in base ai dati della tabella pivot in Eloquent ORM di Laravel

Ci sono 2 modi:uno con la specifica di table.field , altri usano l'alias Eloquent pivot_field se usi 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

Funzionerà, perché Eloquent alias tutti i campi forniti in withPivot come pivot_field_name .

Ora, soluzione generica:

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

Questo ordinerà la query correlata.

Nota: Non complicarti la vita nominando le cose in questo modo. posts non sono necessariamente articles , userei l'uno o l'altro nome, a meno che non ce ne sia davvero bisogno.