109 votes

Laravel Eloquent : Comment obtenir seulement certaines colonnes de tables jointes

J'ai deux tables jointes dans Eloquent, à savoir les thèmes et les utilisateurs.

modèle de thème :

public function user() {
  return $this->belongs_to('User');
}

modèle d'utilisateur :

public function themes() {
  return $this->has_many('Theme');
}

Mon appel api Eloquent ressemble à ce qui suit :

return Response::eloquent(Theme::with('user')->get());

Ce qui renvoie toutes les colonnes du thème (c'est bien), et toutes les colonnes de l'utilisateur (ce n'est pas bien). Je n'ai besoin que de la colonne 'username' du modèle user, comment puis-je limiter la requête à cela ?

4voto

John Veldboom Points 53

Dans Laravel 4, vous pouvez masquer certains champs en ajoutant ce qui suit dans votre modèle.

protected $hidden = array('password','secret_field');

http://laravel.com/docs/eloquent#converting-to-arrays-or-json

4voto

JoeGalind Points 885

Sur Laravel 5.5, la façon la plus propre de faire cela est :

Theme::with('user:userid,name,address')->get()

Vous ajoutez deux points et les champs que vous souhaitez sélectionner, séparés par une virgule et sans espace entre eux.

2voto

user3716003 Points 61

Utilisation du modèle :

Model::where('column','value')->get(['column1','column2','column3',...]);

Utilisation de Query Builder :

DB::table('table_name')->where('column','value')->get(['column1','column2','column3',...]);

0voto

Kornel Points 21

Si j'ai bien compris, ce qui est renvoyé est très bien, sauf que vous voulez voir une seule colonne. Si c'est le cas, ce qui suit devrait être beaucoup plus simple :

return Response::eloquent(Theme::with('user')->get(['username']));

0voto

Pradeep Kumar Points 11

#Vous pouvez obtenir des colonnes sélectionnées à partir de deux ou trois tables différentes.

$users= DB::Table('profiles')->select('users.name','users.status','users.avatar','users.phone','profiles.user_id','profiles.full_name','profiles.email','profiles.experience','profiles.gender','profiles.profession','profiles.dob',)->join('users','profiles.user_id','=','users.id')
            ->paginate(10);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X