2014-11-23 3 views
0

В Laravel 4/5 как можно заказать результаты таблицы, основанные на поле, которое связано с этой таблицей соотношением?Laravel 4/5, заказ по иностранному столбцу

Мой случай:

У меня есть users, что только хранить e-mail и password поля. Но у меня есть еще один стол под названием details, что хранить name, birthday и т.д ...

Как я могу получить результаты users таблицы сортировка по details.name?

P.S .: Поскольку пользователи центральная таблица, в которой есть много других отношений и имеет много деталей, я не могу просто сделать обратный поиск как Details::...

+0

Вы используете Eloquent и как выглядит текущий запрос на получение записей? –

+1

Вы должны «присоединиться» к таблице подробностей, нет другого пути. –

ответ

2

Я бы рекомендовал использовать присоединиться. (Модели должны быть названы в единственном числе; Пользователь; Detail)

$users = User::join('details', 'users.id', '=', 'details.user_id') //'details' and 'users' is the table name; not the model name 
    ->orderBy('details.name', 'asc') 
    ->get(); 

Если использовать этот запрос много раз, вы можете сохранить его в объеме в модели.

class User extends \Eloquent { 
    public function scopeUserDetails($query) { 
     return $query->join('details', 'users.id', '=', 'details.user_id') 
    } 
} 

Затем вызовите запрос с вашего контроллера.

$users = User::userDetails()->orderBy('details.name', 'asc')->get(); 
+0

Спасибо за ответ, но я уже использую этот способ, и он очень плохой, поскольку может создавать конфликты при заказе столбцов с таким же именем, как идентификатор и т. Д. Я искал способ «ORM». – insign

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