Bonjour à tous !
Je travaille actuellement sur ma première application web avec Laravel 4 et je découvre petit à petit les fonctionnalités de ce merveilleux Framework. Seulement voilà ! Je suis confronté à un problème avec mes utilisateurs.
Voici la situation :
J'ai des utilisateurs qui sont soit une famille, soit un gérant, soit un admin.
Tous les utilisateurs ont des champs en commun (login, email, password, etc...) puis des champs spécifiques selon qu'ils soient famille, gérant ou admin (par exemple le nom de famille et l'adresse dans le cas d'un utilisateur famille).
Après avoir cherché le meilleur moyen de modéliser ça, les relations polymorphiques avec Eloquent m'ont semblé un moyen d'y parvenir (mais peut-être me fourvoie-je complètement ?)
J'ai créé 4 tables : users, familles, gerants, admins et ajouté à ma table "users" des champs "profil_id" (qui contiendra l'id de l'enregistrement famille/gérant/admin correspondant) et "profil_type" pour indiquer lequel des trois profil il s'agit.
On aurait donc un enregistrement "users" lié à un enregistrement "familles" OU un enregistrement "gerants" OU un enregistrement "admins"
J'ai créé 4 modèles correspondants : User, Famille, Gerant, Admin :
Le modèle User :
Le modèle Famille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class User extends Eloquent implements UserInterface, RemindableInterface { use UserTrait, RemindableTrait; protected $guarded = []; /** * The database table used by the model. * * @var string */ protected $table = 'users'; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = array('password', 'remember_token'); public function profil() { return $this->morphTo(); } }
Le modèle Gerant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Famille extends Eloquent { protected $guarded = []; protected $table = 'familles'; public $timestamps = true; public function users() { return $this->morphMany('User', 'profil'); } }
Et enfin le modèle Admin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Gerant extends Eloquent { protected $guarded = []; protected $table = 'gerants'; public $timestamps = true; public function users() { return $this->morphMany('User', 'profil'); } }
Mes questions sont les suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Admin extends Eloquent { protected $table = 'admins'; public $timestamps = true; public function users() { return $this->morphMany('User', 'profil'); } }
- La relation polymorphique est-elle adaptée à ma situation ? Suis-je en train de monter une usine à gaz alors qu'il existe un moyen beaucoup plus simple ?
- Lorsque je souhaite créer un enregistrement dans la table "familles" via un formulaire et créer l'enregistrement "users" correspondant (via le même formulaire idéalement), comment puis-je récupérer l'ID de la famille qui vient d'être créé via le formulaire pour le mettre dans la table "users", dans l'enregistrement qui vient d'être créé également via le formulaire ?
Je ne suis peut-être pas très clair dans l'exposition de mon problème donc n'hésitez pas à me signaler si j'ai oublié des choses .
Merci beaucoup !
-Anthelme-
Partager