Doctrine2 One-To-many / Many-To-One-Beziehungen
So, 1:M /M:1-Beziehungen nicht so funktionieren, wie M:M Beziehungen arbeiten (offensichtlich), aber ich dachte, dass mit der richtigen Konfiguration können Sie erhalten die gleiche Ausgabe wie eine M:M Beziehung.
Im Grunde brauchte ich eine weitere hinzufügen-Feld (position), um path_offer
.
Ich dachte, ich habe es zu arbeiten, bis ich versuchte mit $path->getOffers()
welche zurückgegeben PersistentCollection
statt, was ich dachte, ist gezwungen (ein ArrayCollection
Angebote). Trotzdem, innerhalb der aktuellen Tabelle, ich habe zwei Einträge: zwei Angebote zu einem Pfad. $path->getOffers()
ist wieder ein PersistantCollection
einer PathOffer
die nur eine Offer
gehängt und nicht beide.
Meine Frage ist, wie man wirklich nutzen diese Arten von Beziehungen? Da brauche ich es mit vielen anderen Aspekten dieses Projekt an dem ich arbeite (viele M:M-Sammlungen müssen auch positioniert werden)
Mein code ist unten!
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;
[..]
- Endlich habe ich einen workaround für dieses. Kann man sich in den source-code prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es herausgefunden. Hoffentlich ist dieser Beitrag können Sie helfen anderen, die so frustriert sind wie ich!
Path.php
PathOffer.php
Offer.php
Und für meine frontend-Logik:
PathController.php
PathType.php (der Pfad bilden)
PathOfferType.php (PathType die Angebote der collection-Typ)
PathHandler.php (wie verarbeite ich die form)
Aussieht, tun Sie es richtig. Mach dir keine sorgen über die
PersistentCollection
/ArrayCollection
Zeug-alles, was zählt, ist, dass Sie Sammlungen.$Path->getOffers()
sollte sogar wieder eine Sammlung vonPathOffers
, und jederPathOffer
haben sollte, ein Angebot.So sollte es Aussehen:
Bin ich etwas fehlt?