php - examples - Laravel Eager Loading-Cargue solo columnas específicas
with laravel (3)
Estoy intentando cargar un modelo en laravel pero solo devuelvo ciertas columnas. No quiero que se presente toda la tabla cargada y ansiosa.
public function car()
{
return $this->hasOne(''Car'', ''id'')->get([''emailid'',''name'']);
}
Estoy teniendo el siguiente error:
log.ERROR: excepción ''Symfony / Component / Debug / Exception / FatalErrorException'' con el mensaje ''Llamada al método indefinido Illuminate / Database / Eloquent / Collection :: getAndResetWheres ()''
Además, no es necesario que especifiques obtener columnas específicas en el modelo y el método de relación en sí ... Puedes hacerlo cuando lo necesites ... De esta manera:
$owners = Owner::
with([
''car'' => function($q)
{
$q->select(''id'', ''owner_id'', ''emailid'', ''name'');
},
''bike'' => function($q)
{
$q->select(''id'', ''owner_id'', ''emailid'', ''name'');
}
])->
get();
De esta forma, también puede obtener todas las columnas del modelo relacionado si alguna vez lo ha necesitado.
En tu controlador deberías estar haciendo algo como
App/Car::with(''owner:id,name,email'')->get();
Supongamos que tiene dos modelos definidos como a continuación
<?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'');
}
}
y
<?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'');
}
}
y tienes dos tablas algo así como:
owners: id | name | email | phone | other_columns...
y
cars: id | owner_id | make | color | other_columns...
Los créditos van a los documentos: eloquent-relationships#eager-loading desplazamiento a Columnas específicas de eloquent-relationships#eager-loading
Haz uso del método select()
:
public function car() {
return $this->hasOne(''Car'', ''id'')->select([''owner_id'', ''emailid'', ''name'']);
}
Nota: Recuerde agregar las columnas asignadas a la clave externa que coincidan con ambas tablas. Por ejemplo, en mi ejemplo, asumí que un Owner
tiene un Car
, lo que significa que las columnas asignadas a la clave externa serían algo así como owners.id = cars.owner_id
, así que tuve que agregar owner_id
a la lista de columnas seleccionadas;