sql >> Databasteknik >  >> RDS >> Mysql

Hur man beställer genom pivottabelldata i Laravels Eloquent ORM

Det finns två sätt - ett med att specificera table.field , annan med Eloquent alias pivot_field om du använder 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

Detta kommer att fungera, eftersom Eloquent aliaser alla fält som tillhandahålls i withPivot som pivot_field_name .

Nu, generisk lösning:

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

Detta kommer att ordna den relaterade frågan.

Obs! Gör inte ditt liv svårt med att namnge saker på det här sättet. posts är inte nödvändigtvis articles , jag skulle använda antingen det ena eller det andra namnet, om det inte verkligen behövs.



  1. Hur tar jag bort rader med data från mysql-tabellen automatiskt 24 timmar efter data in i tabellen?

  2. SQL:Returnerar det vanligaste värdet för varje person

  3. Aggregat och partitionering

  4. Hur operatören LÅTER SOM fungerar i MySQL