Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zamawiać według danych tabeli przestawnej w Eloquent ORM firmy Laravel

Są 2 sposoby - jeden z określeniem table.field , inne używają Eloquent aliasu pivot_field jeśli używasz 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

To zadziała, ponieważ Eloquent używa aliasów do wszystkich pól podanych w withPivot jako pivot_field_name .

Teraz ogólne rozwiązanie:

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

To uporządkuje powiązane zapytanie.

Uwaga: Nie utrudniaj sobie życia, nazywając rzeczy w ten sposób. posts niekoniecznie są articles , użyłbym jednej lub drugiej nazwy, chyba że naprawdę jest to konieczne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela MySQL z kolumną TEXT

  2. Jaki typ zmapowałbyś BigDecimal w Javie/Hibernacji w MySQL?

  3. Jak podłączyć PHP do MySQL

  4. Błąd MySQL:nieprawidłowe użycie UPDATE i LIMIT

  5. Uruchamianie AMP (apache mysql php) na Androidzie