2017-10-20 16 views
0

Je les tableaux suivants:Utilisation de hasManyThrough dans la requête Relation

users 
id|name|username 

Areas 
id|name 

user_area 
id|user_id|area_id 

Buildings 
id|name|area_id 

Dans les modèles de l'utilisateur que je veux appeler requête que tous les utilisateurs ont ses zones affectées et ses zones affectées possède de nombreux bâtiments, donc je créé une méthode Modèle utilisateur qui interroge les bâtiments affectés par l'utilisateur. Dans App \ User Modèle:

public function areas() 
    { 
     return $this->belongsToMany('App\Area','area_user'); 
    } 
    public function UserBuildings(){ 
     return $this>hasManyThrough('App\Building','App\Area','user_id','area_id'); 
    } 

Dans App \ Zone Modèle:

public function users(){ 
     return $this->belongsToMany('App\User','area_user','area_id','user_id'); 
    } 

    public function buildings(){ 
     return $this->hasMany('App\Building'); 
    } 

Dans App \ Modèle de construction:

public function areas(){ 
     $this->belongsTo('App\Area'); 
    } 

Comment structurer i une méthode de relation dans le modèle de l'utilisateur qui obtiennent les bâtiments assignés à l'utilisateur.

Merci

Répondre

1

Vous ne pouvez pas utiliser hasManyThrough ici, mais vous pouvez utiliser imbriqué whereHas() pour obtenir tous les bâtiments affectés à l'utilisateur authentifié:

Building::whereHas('area', function ($q) { 
    $q->whereHas('users', function ($q) { 
     $q->where('id', auth()->id()); 
    }); 
})->get(); 

En outre, vous devez renommer areas relation avec area dans Building modèle, puisque chaque bâtiment appartient à une seule zone.

+0

Merci pour votre réponse, j'ai essayé votre question ci-dessus dans mon contrôleur. Erreur démontrant: Symfony \ Composant \ Debug \ Exception \ FatalThrowableError (E_ERROR) appel à une fonction membre getRelationExistenceQuery() sur null ==================== Essayé de comprendre où le problème, j'ai remarqué que lorsque je demande le nom de zone de l'ID de bâtiment spécifié, erreur montrant: >>> App \ Building :: find (1) -> zone Erreur PHP: Essayer d'obtenir la propriété de non-objet sur la ligne 1 >>> – user2873860

+0

@ user2873860 cette erreur n'est pas liée à ce code. –

+0

Lorsque j'ai supprimé le code, l'erreur a disparu. donc je pense que c'est lié – user2873860