У меня есть 2 соединенных таблицы в Eloquent, а именно темы и пользователи.
модель темы:
public function user() {
return $this->belongs_to('User');
}
модель пользователя:
public function themes() {
return $this->has_many('Theme');
}
Мой вызов API Eloquent выглядит следующим образом:
return Response::eloquent(Theme::with('user')->get());
Что возвращает все столбцы из темы (это нормально) и все столбцы от пользователя (не нормально). Мне нужен только столбец «имя пользователя» из пользовательской модели, как я могу ограничить запрос этим?
Response
какой класс мне нужно импортировать?Ответы:
Измените свою модель, чтобы указать, какие столбцы вы хотите выбрать:
И не забудьте указать столбец, к которому вы присоединяетесь.
источник
Для Laravel> = 5.2
Используйте -> Ливер () метод
Для Laravel <= 5.1
Используйте -> списки () метод
источник
Вы можете указать массив полей в параметре get следующим образом:
ОБНОВЛЕНИЕ (для Laravel 5.2) Из документации вы можете сделать это:
источник
SQLSTATE[42S22]: Column not found
и SQL не включает таблицу вwith
. В сообщении об ошибке отображается sql «SELECT fk_table.column1 FROM main_table».Я знаю, вы просите Eloquent, но вы можете сделать это с помощью Fluent Query Builder.
источник
Вот как я это делаю
Первый ответ пользователя 2317976 не сработал для меня, я использую laravel 5.1
источник
pivot
в $ hidden массив модели сообщенияprotected $hidden = ['pivot']
Другой вариант - использовать
$hidden
свойство модели, чтобы скрыть столбцы, которые вы не хотите отображать. Вы можете определить это свойство на лету или установить значения по умолчанию для вашей модели.Теперь пароль пользователя будет скрыт, когда вы вернете ответ JSON.
Вы также можете настроить его "на лету" аналогичным образом.
источник
static
.Использование с разбивкой на страницы
источник
user2317976 представил отличный статический способ выбора столбцов связанных таблиц.
Вот динамический трюк, который я нашел, чтобы вы могли получить все, что захотите, используя модель:
Я только что обнаружил, что этот трюк также хорошо работает с load (). Это очень удобно.
Убедитесь, что вы также указали ключ целевой таблицы, иначе она не сможет его найти.
источник
Сюда:
источник
Я знаю, что это старый вопрос, но если вы создаете API, как это делает автор вопроса, используйте выходные преобразователи для выполнения таких задач.
Transofrmer - это слой между фактическим результатом запроса к базе данных и контроллером. Это позволяет легко контролировать и изменять то, что будет выводиться пользователю или потребителю API.
Я рекомендую Fractal как прочную основу вашего выходного слоя преобразования. Вы можете прочитать документацию здесь .
источник
В Laravel 4 вы можете скрыть определенные поля от возврата, добавив в свою модель следующее.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
источник
В Laravel 5.5 самый чистый способ сделать это:
Вы добавляете двоеточие и поля, которые хотите выбрать, через запятую и без пробела между ними.
источник
Использование модели:
Используя Query Builder:
источник
Если я хорошо понял, что возвращается, это нормально, за исключением того, что вы хотите видеть только один столбец. Если это так, то это должно быть намного проще:
источник
Проверьте, http://laravel.com/docs/database/eloquent#to-array
Вы должны иметь возможность определить, какие столбцы вы не хотите отображать в своем API.
источник