Je cours Laravel 5.4 et pour une raison quelconque je ne peux pas faire un choix de colonne sur une relation polymorphique un-à-plusieurs. Je veux limiter les colonnes renvoyées dans la table associée.laravel eloquent - ne peut pas vouloir charger la relation polymorphe avec la requête 'select'
Voici mon '1 côté' de mon 1-à-plusieurs:
class MapNodes extends Model {
protected $table = 'map_nodes';
protected $fillable = ['title'];
protected $validations = ['title' => 'max:200|string' ];
public function SystemConstants() {
return $this->morphMany('App\Modules\Models\SystemConstants', 'imageable');
}
}
Voici ma table 'beaucoup de côté' dans la relation:
class SystemConstants extend Model {
protected $table = 'system_constants';
protected $fillable = ['name','imageable_id','imageable_type'];
protected $validations = ['name' => 'max:200|string',
'imageable_id' => 'integer|required',
'imageable_type' => 'max:45|string'];
// define this model as polymorphic
public function imageable() {
return $this->morphTo();
}
}
Voici deux façons je suis essayant de l'appeler. On a toutes les colonnes sur SystemConstants, et la seconde, je veux juste deux colonnes:
$temp = MapNodes::with('SystemConstants')->find(25786);
$temp = MapNodes::with([ 'SystemConstants' =>
function($query) {
return $query->select('system_constants.id', 'system_constants.name');
} ])->find(25786);
Pourquoi le premier appel retour, les documents relatifs, mais pas la seconde? Les instructions SQL ci-dessous pour les deux appels sont exactement les mêmes (à l'exception que je ne veux que deux colonnes dans le deuxième appel).
select * from `system_constants` where
`system_constants`.`imageable_id` in (?) and
`system_constants`.`imageable_type` = ? - a:2:{i:0;i:25786;i:1;s:5:"Nodes";}
select `system_constants`.`id`, `system_constants`.`name` from `system_constants` where
`system_constants`.`imageable_id` in (?) and
`system_constants`.`imageable_type` = ? - a:2:{i:0;i:25786;i:1;s:5:"Nodes";}
Merci! Je ne sais pas pourquoi cela fonctionne parce que le SQL généré entre mes deux déclarations est le même, mais cela fonctionne! – cardinalPilot