Intereting Posts
время 30 секунд превысило ошибку? файл получить содержимое Проведите массив рекурсивно и напечатайте путь ходьбы Способ определения ширины браузера в PHP без javascript? PHPMailer – этот поток не поддерживает SSL / crypto Перезагрузите содержимое div afer регулярного промежутка времени Простая форма, не отправляющая данные через _POST Не могу понять, почему скрипт php не работает при вызове $ .ajax Как разрешить определенные теги HTML в поле формы в Symfony 1.2 Как вы получаете информацию пользователя facebook и вставляете ее в базу данных? Как я могу использовать WebEx URL / XML API для регистрации пользователя для события? Массовые параметризованные вставки Как добавить текстовое поле в форму без класса модели в YII? Примечание. Преобразование массива в строку – PHP & mySQL PHP. Получите md5 удаленного файла? Динамически вызывать класс с переменным числом параметров в конструкторе

Laravel Eager Loading – Загрузка только определенных столбцов

Я пытаюсь загрузить модель в laravel, но возвращать только некоторые столбцы. Я не хочу, чтобы вся загруженная таблица была представлена.

public function car() { return $this->hasOne('Car', 'id')->get(['emailid','name']); } 

Я получаю следующую ошибку:

log.ERROR: исключение «Symfony \ Component \ Debug \ Exception \ FatalErrorException» с сообщением «Call to undefined method Illuminate \ Database \ Eloquent \ Collection :: getAndResetWheres () '

Related of "Laravel Eager Loading – Загрузка только определенных столбцов"

Используйте метод select() :

 public function car() { return $this->hasOne('Car', 'id')->select(['owner_id', 'emailid', 'name']); } 

Примечание. Не забудьте добавить столбцы, назначенные внешнему ключу, соответствующему обеим таблицам. Например, в моем примере я предположил, что у Owner есть Car , что означает, что столбцы, назначенные внешнему ключу, будут чем-то вроде owners.id = cars.owner_id , поэтому мне пришлось добавить owner_id в список выбранных столбцов;

Также вам не нужно указывать получение определенных столбцов в модели и самом методе отношений … Вы можете делать это, когда вам это нужно … Вот так:

 $owners = Owner:: with([ 'car' => function($q) { $q->select('id', 'owner_id', 'emailid', 'name'); }, 'bike' => function($q) { $q->select('id', 'owner_id', 'emailid', 'name'); } ])-> get(); 

Таким образом, вы также можете получить все столбцы соответствующей модели, если вам когда-либо понадобится.

В вашем контроллере вы должны делать что-то вроде

 App\Car::with('owner:id,name,email')->get(); 

Предположим, что у вас есть две модели, определенные ниже

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Car extends Model { protected $table = 'car'; public function owner() { return $this->belongsTo('App\Owner', 'owner_id'); } } 

а также

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Owner extends Model { protected $table = 'owner'; public function car() { return $this->hasMany('App\Car', 'owner_id'); } } 

и у вас есть две таблицы:

 owners: id | name | email | phone | other_columns... 

а также

 cars: id | owner_id | make | color | other_columns... 

Кредиты переходят к документам: eloquent-relationship # eager-load прокручиваются до Eager Загрузка конкретных столбцов