Doctrine2 Un-À-Plusieurs ou Plusieurs-À-Un les relations
Donc, 1:M /M:1 relations ne fonctionnent pas de la façon de M:M de relations de travail (évidemment), mais je pensais qu'avec la bonne configuration, vous pouvez obtenir le même résultat en tant que M:M relation.
En gros, j'ai besoin d'ajouter un autre champ (position), à path_offer
.
J'ai pensé que je l'ai eu à travailler jusqu'à ce que j'ai essayé d'utiliser $path->getOffers()
qui a retourné un PersistentCollection
au lieu de ce que je pensais forcée (un ArrayCollection
de l'Offre). De toute façon, à l'intérieur de la table actuelle, j'ai deux entrées: deux offres pour un seul chemin. $path->getOffers()
est de retour une PersistantCollection
d'un PathOffer
qui a seulement une Offer
attatched et pas les deux.
Ma question est de savoir comment vraiment utiliser ces types de relations? Parce que j'en ai besoin avec de nombreux autres aspects de ce projet, je travaille sur (beaucoup de M:M collections doivent également être positionné)
Mon code est ci-dessous!
Path.php
[..]
/**
* @ORM\Entity
* @ORM\Table(name="path")
*/
class Path
{
/**
* @var integer
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="PathOffer", mappedBy="offer", cascade={"all"})
*/
protected $offers;
[..]
PathOffer.php
[..]
/**
* @ORM\Entity
* @ORM\Table(name="path_offer")
*/
class PathOffer
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Path", inversedBy="offers", cascade={"all"})
*/
protected $path;
/**
* @ORM\ManyToOne(targetEntity="Offer", inversedBy="offers", cascade={"all"})
*/
protected $offer;
/**
* @ORM\Column(type="integer")
*/
protected $pos;
[..]
Offer.php
[..]
/**
* @ORM\Entity
* @ORM\Table(name="offer")
*/
class Offer
{
/**
* @var integer
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var \ZGoffers\MainBundle\Entity\PathOffer
*
* @ORM\OneToMany(targetEntity="PathOffer", mappedBy="path", cascade={"all"})
*/
protected $paths;
[..]
OriginalL'auteur Jordan | 2011-06-28
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris. J'espère que ce post peut aider les autres qui a frustré comme je l'ai fait!
Path.php
PathOffer.php
Offer.php
Et pour mon frontend logique:
PathController.php
PathType.php (le chemin de la forme)
PathOfferType.php (PathType de l'offre type de collection)
PathHandler.php (comment j'ai procédé de la forme)
lol c'est exactement ce qui est sur mon esprit
OriginalL'auteur Jordan
Dirait que vous êtes en train de faire. Ne vous inquiétez pas au sujet de la
PersistentCollection
/ArrayCollection
des trucs, tout ce qui compte c'est qu'ils sont des collections.$Path->getOffers()
devrait d'ailleurs revenir à une collection dePathOffers
, et chaquePathOffer
devrait avoir une offre.Donc ça devrait marcher comme ça:
Suis-je raté quelque chose?
OriginalL'auteur timdev