При использовании жадной загрузки в Laravel 4 мы можем нагрузить отношения, используя следующие:Фильтрация полей по возвращенным отношениям в Laravel4?
$user = User::with('role')->find(1);
Который возвращает представление пользователя, и мы можем получить доступ представление о роли через
$user->roles();
сейчас мы также можем отфильтровать нетерпеливую нагрузку, используя:
$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->find(1);
Которая вернет представление пользователя с ролями заполняется только там, где поле имени роли содержит key
.
Мы можем ограничить поля, возвращенные в представлении пользователя, добавив ограничение select()
.
$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->select('email')->find(1);
Который будет возвращать только email
и id
поля на представлении пользователя, но все поля на представлении роли.
Я надеялся, что смогу ограничить поля, возвращенные на отношения (для использования в api), но я не могу найти способ; Я попробовал два метода ниже.
$user = User::with(array('role' => function($query) {
$query->select('name');
}))->find(1);
и
$user = User::with('role')->select('role.name')->find(1);
Проблема в том, что я не знаю, какие столбцы я после того, как пока пользователь апи не запросит что-то вроде 'поля = электронная почта, роль: (имя)' в строке запроса. – Hailwood
@ Hailwood Я обновил свой ответ. –
Нет, не работает, он имеет эффект в том, что именованные поля перечислены первыми в представлении ролей, но это не ограничивает ответ только этими полями! – Hailwood