2017-09-22 3 views
1

Ceci est mon scénario.Laravel 5.5 deux relations sur la même table

J'ai une table nommée 'team' et la table laravel 'user'.

Je suis en train de faire deux relations entre l'équipe et l'utilisateur pour un « propriétaire » et l'autre pour « manager »

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 


class Team extends Model 
{ 
    protected $table = 'team'; 

    public function owner(){ 
     return $this->belongsTo(User::class, 'id'); 
    } 

    public function manager(){ 
     return $this->belongsTo(User::class, 'id'); 
    } 

} 

Mais il semble que quelque chose ne fonctionne pas comme je m'y attendais, comment faire c'est dans le bon sens? Merci.

Répondre

3

Vous ne pouvez pas le faire avec la même id, vous devez créer 2 colonnes OWNER_ID et manager_id pour la table d'utilisateur vous concernent tables

public function owner(){ 
     return $this->belongsTo('App\User','id','owner_id'); 
    } 

    public function manager(){ 
     return $this->belongsTo('App\User','id','manager_id'); 
    } 
+0

J'ai deux colonnes sur la table "équipe", propriétaire manager – natas

+0

J'ai modifié ma réponse – BugraDayi

0

Vous pouvez avoir un drapeau mis sur la table des utilisateurs pour vous dire que un représente l'équipe et directeur, dire role puis mettez à jour votre relation avec les méthodes de portée supplémentaires comme:

public function user(){ 
    return $this->belongsTo(User::class, 'id'); 
} 

public function scopeManager(){ 
    return $this->user()->where('role', 'manager'); 
} 

public function scopeOwner(){ 
    return $this->user()->where('role', 'owner'); 
} 

Cela signifie que vous pouvez configurer une relation entre l'utilisateur et l'équipe et définir un filtre sur ce type d'utilisateur que vous faites référence : Je ne suis pas sûr que ce soit une réponse très complète, mais je suis assez sûr que cela devrait suffire.

Tout ce qui manque, veuillez les signaler.

0

Comment Laravel sait-il qui est le propriétaire et qui est le gestionnaire? À quoi ressemble votre structure de base de données?

Dans votre scénario actuel, les fonctions owner() et manager() renverraient les mêmes résultats. De plus, dans votre configuration actuelle, cela signifierait qu'une équipe appartient à un seul utilisateur (en outre, vous dites que votre clé étrangère est stockée dans la colonne id qui est généralement la clé primaire).

Je pense que ce dont vous avez besoin est une relation ManyToMany entre l'utilisateur et l'équipe et une table intermédiaire qui stocke le rôle que l'utilisateur a au sein d'une équipe. Si un utilisateur n'est membre que d'une équipe à la fois, l'équipe belongsTo et son rôle peuvent être enregistrés dans un champ distinct de la table Utilisateur.

Quelques conseils:

1) Soyez plus précis sur votre problème. "quelque chose ne fonctionne pas comme prévu" n'est pas spécifique, et cela ne nous aide pas à comprendre ce que vous voulez faire et ce qui s'est réellement passé

2) Lisez la documentation de Laravel. https://laravel.com/docs/5.5/eloquent-relationships