2016-07-08 4 views
4

У меня есть следующий запрос:Сортировать по колонке отношений

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

Мне нужно заказать его item.type поэтому я попытался:

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

, но я получаю Unknown column 'item.type' in 'order clause'

Я пропал?

+0

ли Вашей таблица с именем элемент или элементы? Я предполагаю, что ваши отношения называются item, но таблица - это элементы, поэтому она должна быть 'orderBy ('items.type')' – rypskar

+0

Я пробовал оба 'Column not found: 1054 Unknown column 'items.type' in 'order clause' ' – TheUnreal

+0

Посмотрите на свой журнал запросов, ваш основной запрос и отношения отделены друг от друга, они не пересекаются. Вам нужно будет сделать какой-то тип соединения, чтобы иметь возможность заказать другую таблицу, как это более чем вероятно. – lagbox

ответ

2

Join() работал отлично благодаря @rypskar комментарий

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

Ну, ваша нетерпеливая загрузка, вероятно, не вызывает запрос, который вы ожидаете, и вы можете проверить его, включив журнал запросов.

Но я бы, вероятно, просто использовать коллекцию фильтр:

$items = UserItems::where('user_id','=',$this->id) 
     ->where('quantity','>',0) 
     ->get() 
     ->sortBy(function($useritem, $key) { 
      return $useritem->item->type; 
     }); 
+0

По каким-то причинам возвращенные данные - это объект, а не массив объектов, например возвращенный и исходный запрос – TheUnreal

Смежные вопросы