2017-04-21 4 views
0

Dans le modèle de l'utilisateur:Comment inclure une colonne ou des colonnes d'un modèle enfant qui appartient à Parent Model in Eloquent?

public function role(){ 

    return $this->hasOne('App\Model\Roles','id','role_id'); 

} 

Dans les rôles Modèle:

public function user(){ 

    return $this->belongTo('App\Model\Users'); 

} 

Dans la méthode:

$query = Users::where('id', $id)->get(); 

ce que je reçois (JSON):

[{"id":2,"user_name":"hazardgeek","user_email":"[email protected]","user_phone":"*******","user_password":"*********","remember_token":"*****","role_id":2}] 

Qu'est-ce que je veux vraiment: Je veux la colonne role_title du modèle Rôles, pas role_id de la table des utilisateurs. Comme ceci, ......user_password":"thesupernwa","remember_token":null,"role_title":"customer"}]

Comment puis-je réaliser ceci? Je vous remercie.

Répondre

1

Dans User.php Modèle

public function User(){ 
    protected $appends = ['role_title']; 

    public function getRoleTitleAttribute(){ 
      $role = $this->getRelation('role'); 
      return !empty($role) ? $this->role->role_title : null; 
    } 
} 
+0

Votre solution me donne un tableau de modèles de rôles dans un tableau de modèles d'utilisateurs. ne remplace pas la colonne role_id. –

+0

avez-vous ajouté 'protected $ appends = ['role_title'];' dans le modèle user.php? –

+0

oui je l'ai fait ... mais toujours pas de chance –

0

Je fini par utiliser une requêtes premières pour récupérer la bonne réponse

return DB::table('ctr_user') 
      ->select('ctr_user.id AS user_id','user_name','user_email','user_phone','user_password','remember_token','ctr_role.role_title AS title') 
      ->rightJoin('ctr_role', 'ctr_role.id','=','ctr_user.role_id') 
      ->where('ctr_user.id','=',$id) 
      ->get(); 

retour de réponse par cette requêtes brutes est exactement la réponse que je besoin de l'aide Eloquent.

Mais encore comment?