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

Zend Framework PHP Discussion :

Génération des fonction set dans classes model


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 5
    Par défaut Génération des fonction set dans classes model
    Bonjour,

    J'utilise doctrine et une BDD MySQL.
    Lorsque les classes models sont générées je remarque que les fonctions set pour les id ne sont pas générées. Même en les créant à la main dans certains cas cela me pause un problème lors d'une insertion dans la table.

    Par exemple :
    J'ai un model qui contient une propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         * @var RefTypeBonIntervention
         *
         * @ManyToOne(targetEntity="Model_RefTypeBonIntervention")
         * @JoinColumns({
         *   @JoinColumn(name="ID_TYPE_BON_INTERVENTION", referencedColumnName="ID_TYPE_BON_INTERVENTION")
         * })
     
        private $idTypeBonIntervention;
    Une fonction set :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        /**
         * Set idTypeBonIntervention
         *
         * @param RefTypeBonIntervention $idTypeBonIntervention
         * @return Model_BonIntervention
         */
        public function setIdTypeBonIntervention(Model_RefTypeBonIntervention $idTypeBonIntervention)
        {
            $this->idTypeBonIntervention = $idTypeBonIntervention;
            return $this;
        }

    Dans le model Model_RefTypeBonIntervention le setid à été créé à la main puisqu'il n'est pas généré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        /**
         * @var integer $idTypeBonIntervention
         *
         * @Column(name="ID_TYPE_BON_INTERVENTION", type="integer", nullable=false)
         * @Id
         * @GeneratedValue(strategy="AUTO")
         */
        private $idTypeBonIntervention;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       /**
         * Set idTypeBonIntervention
         *
         * @param integer $idTypeBonIntervention
         * @return Model_RefTypeBonIntervention
         */
        public function setIdTypeBonIntervention($idTypeBonIntervention)
        {
            $this->idTypeBonIntervention = $idTypeBonIntervention;
            return $this;
        }
    Dans ma classe dao lorsque je veux insérer un nouveau bon d'intervention je procède comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public function  insert($obj){
       		$registry = Zend_Registry::getInstance();
        	$em = $registry->entitymanager;   	
     
    		$em->persist($obj);
    		$em->persist($obj->getIdTypeBonIntervention());
    		$em->flush();
       }
    Mon problème c'est que l'id contenu dans l'objet $obj->getIdTypeBonIntervention() n'est pas pris en compte et un enregistrement est ajouté dans la table type_bon_intervention et c'est cet l'id qui est ajouté dans l'enregistrement de ma table bon_intervention.

    Et je me demande si le fait que mon model Model_TypeBonIntervention soit généré sans setid() fait que mon id contenu dans mon objet $obj->getIdTypeBonIntervention() n'est pas pris en compte lors de mon insert.

  2. #2
    Membre expérimenté Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Par défaut
    Bonsoir frjover,

    Si j'ai bien saisi ton souci, tu cherches à ajouter un bon de commande dans la BD qui fait une référence à un Type de bon de commande ? En gros, y a un id_type_bon_de_commande dans ta table bon_de_commande.

    Au début, avec les annotations je cherchai toujours à envoyer l'ID de la clé étrangère, comme en procédurale. Seulement, en objet la logique est différente, doctrine gère tout seul la liaison entre les tables et est capable seul, à partir du moment que ton objet Type possède bien les getters/setters, de chercher l'ID.

    Du coup, il te suffit de construire ton objet bonDeCommande avec comme type un objet TypeBonDeCommande et doctrine se charge (sous réserve d'avoir les bonnes annotations pour les relations bidirectionnelles/unidirectionnelles) de faire la liaison des clés étrangères.

    On est bien d'accord que tu as une clé primaire auto-incrémenté et que ton setId() c'est juste pour la clé étrangère de ton objet bonDeCommande ? Perso je n'ai pas de setId(), et je génère mes ID en auto (@ORM\GeneratedValue(strategy="AUTO"))

    Voilà, en espérant t'aider

Discussions similaires

  1. Utiliser des fonctions contenues dans un fichier .bas
    Par usbeck dans le forum Visual C++
    Réponses: 4
    Dernier message: 11/08/2006, 12h03
  2. Réponses: 6
    Dernier message: 22/05/2006, 13h54
  3. Réponses: 22
    Dernier message: 14/04/2006, 17h01
  4. Réponses: 14
    Dernier message: 15/01/2004, 01h15
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

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