Я пытаюсь загрузить модель в 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 () '
Используйте метод 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 Загрузка конкретных столбцов