Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-04-2012 21:23:53

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Insertion une relation many to many sous doctrine et zend

Bonjour tous le monde,

Comment puis je effectuer une insertion des données dans 2 tables et la 3eme produite d'une relation.

Table1 (id_table1, ch_table1, ch_table2)
Table2 (id_table2, ch_table2, ch_table4)
Table1HasTable2 (id_table1, ch_table2, ch_table3)

Pour insérer dans une table le probleme se pose pas. Mais comment Doctrine gére les relations (inserer les données).

J'ai bien surfer sur la toile pour m'inspirer mes sans succès.

Merci pour aide.

Dernière modification par Bouchra (24-04-2012 15:42:56)

Hors ligne

 

#2 24-04-2012 10:02:28

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Insertion une relation many to many sous doctrine et zend

Salut, je ne comprend pas trop ton problème.

Je pense que ton exemple n'est pas bon la table Table1HasTable2 (id_table1, id_table2, ch_table2, ch_table3) sinon tu n'as pas une relation à 3 tables classique manyToMany

J'imagine donc compte tenu de la modification de la table que tu as donné que tu as 3 objets model :
Table1Model
Table2Model
RelationModel

Pour un enregistrement je ferais un truc du genre :

Code:

[lang=php]
$table1 = new Table1Model();
$table2 = new Table2Model();
$relation = new RelationModel();

$relation->addTable2($table2);
$table1->addRelation($relation);

$em->persist($table1);
// A tester s'il y a besoin de faire ça ou pas :
// $em->persist($table2);
// $em->persist($relation);
$em->flush();

Hors ligne

 

#3 24-04-2012 15:31:46

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Re: Insertion une relation many to many sous doctrine et zend

Bonjour,

Merci Orkin d'avoir pris le temps de me répondre. Tout à fait raison  je me suis trompée dans la formulation.

Je testerais et je reviendrais.

A+

Hors ligne

 

#4 24-04-2012 15:43:44

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Insertion une relation many to many sous doctrine et zend

Bouchra a écrit:

Bonjour,

Merci Orkin d'avoir pris le temps de me répondre. Tout à fait raison  je me suis trompée dans la formulation

De rien c'est normal, quand la question est bien formulée c'est toujours un plaisir :p

Hors ligne

 

#5 27-04-2012 00:11:08

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Re: Insertion une relation many to many sous doctrine et zend

De retour, sans succès je n'arrive pas à mettre à jours la table intermidiaire.

La structure des tables sont comme suit :

ligue(id_ligue, nom_ligue, libelle_ligue, adress_ligue, tel_ligue);
Personne(id_pers, nom_pers, prenom_pers, adresse_pers, tel_pers, mail_pers);
PerHaslig(id_ligue, id_pers, mission, date_d, date_f);

Par ORM doctrine j'ai pu créée les models.
Donc j'ai 6 page models (ligue, ligueTable, personne, personneTable, perHasfed, persHasfedTable)

Pour ajouter une ligue le probleme se pose pas idem pour personne.

Mais pour la table intermidiaire je n'arrive pas sad .

Pour le code que Orkin m'a proposé par l'occasion je le remercie. J'ai pas compris comment l'intégré en toute vérité.  J'ai bien cherché mais ....

Code:

Code:[lang=php]

?
$table1 = new Model_Organisation ();
$table2 = new Table2Model();
$relation = new RelationModel();
 
$relation->addTable2($table2);
$table1->addRelation($relation);
 
$em->persist($table1);
// A tester s'il y a besoin de faire ça ou pas :
// $em->persist($table2);
// $em->persist($relation);
$em->flush();

Dans le controlleur :

Code:

$lig = new Model_Ligue();
$objet_pers_lig->ajouter($formData); 

$pers = new Model_Personne() ;
$objet_pers_lig->ajouter($formData);

J'utilise Doctrine 1.2 et Zend 1.11.11

Merci de me débloquer.

Dernière modification par Bouchra (27-04-2012 00:12:07)

Hors ligne

 

#6 27-04-2012 09:56:31

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Insertion une relation many to many sous doctrine et zend

Salut, c'est pas très clair tout ça smile.

On va reprendre étape par étape ça sera surement plus simple. Tu as donc 3 tables :

Bouchra a écrit:

ligue(id_ligue, nom_ligue, libelle_ligue, adress_ligue, tel_ligue)
Personne(id_pers, nom_pers, prenom_pers, adresse_pers, tel_pers, mail_pers)
PerHaslig(id_ligue, id_pers, mission, date_d, date_f)

Ensuite pour déclarer ces 3 tables, tu as 3 modèles puisque ta table PerHaslig contient des paramètres supplémentaires tel que mission, date_d et date_f.

Si j'ai bien compris tu as donc des modèles qui ressemblent à ça (à adapter pour Doctrine 1) :

Code:

[lang=php]
/**
 * @ORM\Entity
 */
class Ligue {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    private $id_ligue;

    /**
     * @ORM\Column(type="string")
     */
    private $nom_ligue;

    /**
     * @ORM\Column(type="string")
     */
    private $libelle_ligue;

    /**
     * @ORM\Column(type="string")
     */
    private $adress_ligue;

    /**
     * @ORM\Column(type="integer")
     */
    private $tel_ligue;

}


/**
 * @ORM\Entity
 */
class Personne {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    private $id_pers;

    /**
     * @ORM\Column(type="string")
     */
    private $nom_pers;

    /**
     * @ORM\Column(type="string")
     */
    private $prenom_pers;

    /**
     * @ORM\Column(type="string")
     */
    private $adresse_pers;

    /**
     * @ORM\Column(type="string")
     */
    private $mail_pers;

    /**
     * @ORM\Column(type="integer")
     */
    private $tel_pers;

}


/**
 * @ORM\Entity
 */
class PerHaslig {

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Personne")
     */
    private $personne; // va générer la ligne personne_id

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Ligue")
     */
    private $ligue; // va générer la ligne ligue_id

    /**
     * @ORM\Column(type="string")
     */
    private $mission;

    /**
     * @ORM\Column(type="integer")
     */
    private $date_d;

    /**
     * @ORM\Column(type="integer")
     */
    private $date_f;

}

Avec ça on nos modèles. (Tu renommeras les champs comme tu veux avec le bon type c'est juste pour avoir un exemple.
Si tout va bien lorsque tu vas charger une ligne PerHaslig tu devrais avoir une personne d'associée et une ligue via les méthodes : $model->getPersonne() et $model->getLigue().

Deuxième étape je comprend pas le code de ton contrôleur, tu créés des objets Model_Ligue et Model_Personne mais tu as un 3ème objet dont on ne sait pas ce que c'est $objet_pers_lig et tu y ajoutes un autre objet $formData. Donc forcément là il n'y a aucune relation entre ton contrôleur et ta base de données.

Donc dans la logique on va dire que tu as déjà une ligue de créée et tu souhaite ajouter une nouvelle personne à cette ligue.

Code:

[lang=php]
// On créé notre nouvel objet Personne s'il est déjà créé on le récupère de la base
$personne = new Personne();
$personne->setNom($nom);
$personne->setAdresse($adresse);
// etc ... je vais pas tout détailler
// Maintenant notre objet personne est près à être enregistré mais j'ai besoin de lui affecter une ligue
// Je vais donc récupérer la ligue à laquelle je dois l'affecter
// Je ne sais pas comment on récupère un objet en base depuis doctrine 1.2 donc à toi d'adapter
$ligue = $monEntityManager->maMethodeQuiRecupereLaLigueAvecSonId($idLigue);
// Maintenant j'ai ma ligue je veux ajouter une ligne dans la table intermédiaire
$perHasLigue = new PerHasLigue();
$perHasLigue->setPersonne($personne);
$perHasLigue->setLigue($ligue);
// Maintenant j'ai tout (à toi de remplir les autres champs) je vais donc pouvoir procéder à l'enregistrement en base de données
// Je persist mon utilisateur s'il est nouveau, sinon je ne pense pas que ça soit utile
$monEntityManager->persist($personne);

// Je dois enregistrer ma relation (si je dis pas de conneries même pour un nouveau membre et/ou une nouvelle ligue cette ligne suffit pour tout enregistrer mais à vérifier
$monEntityManager->persist($perHasLigue);
// Tous mes objets sont persisté, ça veut dire qu'au prochain flush() tout en enregistré en base
$monEntityManager->flush();

Normalement avec ça ça devrait fonctionner. Désolé si c'est pas assez précis mais j'utilise Doctrine 2 et ne connais pas du tout Doctrine1.2, je pense que ça doit fonctionner un peu de la même manière mais bon s'il y a des différences il faudra que tu trouves les méthodes qui te permettent de faire la même chose.

Hors ligne

 

#7 27-04-2012 21:28:46

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Re: Insertion une relation many to many sous doctrine et zend

Merci beaucoup Orkin pour les éclaircissements. Je vais essayer pour m'en sortir.

Dernière modification par Bouchra (27-04-2012 21:31:45)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages