Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > Symfony2 > Doctrine2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/12/2012, 20h25   #1
mbenameur
Invité de passage
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : février 2012
Messages : 7
Points : 1
Points : 1
Par défaut Récupération des objets d'une association bidirectionnelle

Slt tout le monde.
Je suis un débutant avec symfony2
j'ai créer pour essayer deux entités "Facture" et "Produit" dont la l'association et @ManyToMany bidirectionnelle.
le problème est lors de la récupération des objets :
quand je fais : facture->getProduits(); j’obtiens des résultats mais le coté inverse produit->getFactures() déclenche des erreurs dans le template
mbenameur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 14h05   #2
stephan.78
Membre expérimenté
 
Homme Stéphan
Technicien maintenance
Inscription : août 2011
Messages : 376
Détails du profil
Informations personnelles :
Nom : Homme Stéphan
Âge : 43
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : août 2011
Messages : 376
Points : 565
Points : 565
Bonjour,

Il faut regarder du coté des annotations, il faut pointer sur les bons champs.
stephan.78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 14h13   #3
L0rD59
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 40
Points : 25
Points : 25
Envoyer un message via AIM à L0rD59 Envoyer un message via MSN à L0rD59 Envoyer un message via Yahoo à L0rD59
Peux tu nous poster le code (afin de voir les annotations) des classe produits et factures STP
L0rD59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 15h32   #4
mbenameur
Invité de passage
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : février 2012
Messages : 7
Points : 1
Points : 1
Voici mes entités :
entité Facture :
Citation:
<?php

namespace BB\FactBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
* BB\FactBundle\Entity\Facture
* @ORM\Table()
* @ORM\Entity(repositoryClass="BB\FactBundle\Entity\FactureRepository")
*/
class Facture
{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\ManyToMany(targetEntity="BB\FactBundle\Entity\Produit", inversedBy="Facture")
* @ORM\JoinTable(name="facture_produit")
*/
private $produits;

/**
* @var \DateTime $date
* @ORM\Column(name="date", type="date")
*/
private $date;


/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set date
* @param \DateTime $date
* @return Facture
*/
public function setDate($date)
{
$this->date = $date;

return $this;
}

/**
* Get date
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* Constructor
*/
public function __construct()
{
$this->produits = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
* Add produit
* @param BB\FactBundle\Entity\Produit $produit
* @return Facture
*/
public function addProduit(\BB\FactBundle\Entity\Produit $produit)
{
$this->produits[] = $produit;
$produit->addFacture($this);

return $this;
}

/**
* Remove produit
* @param BB\FactBundle\Entity\Produit $produit
*/
public function removeProduit(\BB\FactBundle\Entity\Produit $produit)
{
$produit->removeFacture($this);
$this->produits->removeElement($produit);
}

/**
* Get produits
* @return Doctrine\Common\Collections\Collection
*/
public function getProduits()
{
return $this->produits;
}
}
entité Produit :
Citation:
<?php

namespace BB\FactBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
* BB\FactBundle\Entity\Produit
* @ORM\Table()
* @ORM\Entity(repositoryClass="BB\FactBundle\Entity\ProduitRepository")
*/
class Produit
{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\ManyToMany(targetEntity="BB\FactBundle\Entity\Facture", mappedBy="Produit")
* @ORM\JoinColumn(name="produit_id", referencedColumnName="id")}
*/
private $factures;

/**
* @var string $nom
* @ORM\Column(name="nom", type="string", length=15)
*/
private $nom;


/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set nom
* @param string $nom
* @return Produit
*/
public function setNom($nom)
{
$this->nom = $nom;

return $this;
}

/**
* Get nom
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Constructor
*/
public function __construct()
{
$this->factures = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
* Add facture
* @param BB\FactBundle\Entity\Facture $facture
* @return Produit
*/
public function addFacture(\BB\FactBundle\Entity\Facture $facture)
{
$this->factures[] = $facture;

return $this;
}

/**
* Remove facture
* @param BB\FactBundle\Entity\Facture $facture
*/
public function removeFacture(\BB\FactBundle\Entity\Facture $facture)
{
$this->factures->removeElement($factur);
}

/**
* Get facture
* @return Doctrine\Common\Collections\Collection
*/
public function getFactures()
{
return $this->factures;
}
}
et voici la méthode de récupération depuis le controloeur :
Citation:
public function indexAction($fid, $pid)
{
$em = $this->getDoctrine()->getEntityManager();

$factrep = $em->getRepository("BBFactBundle:Facture");
$fact = $factrep->find($fid);
$prods = $fact->getProduits();

$prodrep = $em->getRepository("BBFactBundleroduit");
$prod = $prodrep->find($pid);
$facts = $prod->getFactures();

return $this->render('BBFactBundleefault:index.html.twig', array('prods' => $prods,'facts'=>$facts));
}
mbenameur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 16h11   #5
L0rD59
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 40
Points : 25
Points : 25
Envoyer un message via AIM à L0rD59 Envoyer un message via MSN à L0rD59 Envoyer un message via Yahoo à L0rD59
Les propriétés/attributs "mappedBy" et "inversedBy"

correspondent respectivement au nom de la propriété dans l'autre objet

en l'ocurence dans ton cas :

Code :
1
2
3
4
5
6
7
8
9
 
class Facture
{
/**
* @ORM\ManyToMany(targetEntity="BB\FactBundle\Entity\Produit", inversedBy="factures")
* @ORM\JoinTable(name="facture_produit")
*/
private $produits;
}
Code :
1
2
3
4
5
6
7
8
9
 
class Produit
{
/**
* @ORM\ManyToMany(targetEntity="BB\FactBundle\Entity\Facture", mappedBy="produits")
* @ORM\JoinColumn(name="produit_id", referencedColumnName="id")}
*/
private $factures;
}
Pour plus d'infos :

http://docs.doctrine-project.org/en/...-bidirectional
L0rD59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/12/2012, 16h49   #6
mbenameur
Invité de passage
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : février 2012
Messages : 7
Points : 1
Points : 1
Merci L0rD59.
c'était bien la faute que j'ai commis, je n'ai pas bien suivi le tuto.
mbenameur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h33.


 
 
 
 
Partenaires

Hébergement Web