Laravel Нетерпеливая Загрузка - Загружайте только определенные столбцы
Я пытаюсь загрузить модель в laravel, но возвращаю только определенные столбцы. Я не хочу, чтобы был представлен весь загруженный стол.
public function car()
{
return $this->hasOne('Car', 'id')->get(['emailid','name']);
}
Я получаю следующую ошибку:
Журнал.ОШИБКА: исключение "Symfony\Компонент\Отладка\Исключение\Исключение фатальной ошибки" с сообщением "Вызов неопределенного метода Illuminate\База данных\Красноречивый\Коллекция::Getandresetwheres()"
3 answers
Используйте метод 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...
Кредиты идут в документы: красноречивые отношения#нетерпеливая загрузка прокрутите до Нетерпеливая загрузка определенных столбцов