Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como ordenar por dados de tabela dinâmica no Eloquent ORM do Laravel


Existem 2 maneiras - uma especificando o table.field , outros usando o alias do Eloquent pivot_field se você usar 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

Isso funcionará, porque o Eloquent alias todos os campos fornecidos em withPivot como pivot_field_name .

Agora, solução genérica:
$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();

Isso ordenará a consulta relacionada.

Observação: Não torne sua vida difícil nomeando as coisas dessa maneira. posts não são necessariamente articles , eu usaria um ou outro nome, a menos que realmente haja necessidade disso.