archvist
archvist

Reputation: 722

Eloquent order relationship results

I have a simple eloquent query and want to include another table with my results, however, the order of relationship results is incorrect.

Is it possible to order the results without using an SQLRAW statement

$groups = AttributeGroup::with('attribute')->where('page_id', $page->id)->get();

What I would like -

$groups = AttributeGroup::with('attribute')->orderBy('iteration', 'DESC')->where('page_id', $page->id)->get();

I get the error of Unknown column because this column is part of relationship table.

Upvotes: 0

Views: 48

Answers (2)

Marwelln
Marwelln

Reputation: 29433

You can use closures to change the query when using with and has.

$groups = AttributeGroup::with(['attribute' => function($query){
    $query->orderBy('iteration');
})->where('page_id', $page->id)->get();

Details are available on https://laravel.com/docs/5.6/eloquent-relationships#constraining-eager-loads

Upvotes: 0

thefallen
thefallen

Reputation: 9749

This will order each attribute relation of every attribute group result:

$groups = AttributeGroup::with(['attribute' => function ($query) {
    $query->orderBy('iteration', 'DESC');
}])->where('page_id', $page->id)->get();

Is this what you want to achieve?

Upvotes: 3

Related Questions