with examples php laravel laravel-4

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;