Search code examples
laraveleloquent

Order by relationship column


I have the following query:

$items = UserItems::with('item')
        ->where('user_id','=',$this->id)
        ->where('quantity','>',0)
        ->get();

I need to order it by item.type so I tried:

$items = UserItems::with('item')
        ->where('user_id','=',$this->id)
        ->where('quantity','>',0)
        ->orderBy('item.type')
        ->get();

but I get Unknown column 'item.type' in 'order clause'

What I am missing?


Solution

  • join() worked fine thanks to @rypskar comment

    $items = UserItems
            ::where('user_id','=',$this->id)
            ->where('quantity','>',0)
            ->join('items', 'items.id', '=', 'user_items.item_id')
            ->orderBy('items.type')
            ->select('user_items.*') //see PS:
            ->get();
    

    PS: To avoid the id attribute (or any shared name attribute between the two tables) to overlap and resulting in the wrong value, you should specify the select limit with select('user_items.*').