IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Récupérer la valeur d'un ID venant d'être créé/Questions sur les relations polymorphiques


Sujet :

Laravel PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Récupérer la valeur d'un ID venant d'être créé/Questions sur les relations polymorphiques
    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 :

    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 Famille :

    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');
    	}
     
    }
    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 Gerant extends Eloquent {
     
    	protected $guarded = [];
    	protected $table = 'gerants';
    	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
    class Admin extends Eloquent {
     
    	protected $table = 'admins';
    	public $timestamps = true;
     
    	public function users()
    	{
    		return $this->morphMany('User', 'profil');
    	}
     
    }
    Mes questions sont les suivantes :

    - 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-

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    Il ne te manquerais pas une 5e table : la table "pivot" ?
    Celle dans laquelle Laravel stocke les id de la relation ET le model associé.

Discussions similaires

  1. [XL-2002] récupérer la valeur d'une cellule en fonction d'un calcul sur sa position
    Par marcelisa2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/10/2010, 00h00
  2. Réponses: 1
    Dernier message: 05/03/2010, 12h15
  3. Réponses: 10
    Dernier message: 30/06/2008, 22h04
  4. Réponses: 2
    Dernier message: 29/03/2008, 00h28
  5. question sur les valeurs de retour
    Par arasium dans le forum Langage
    Réponses: 10
    Dernier message: 24/07/2006, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo