因此,1:M / M:1关系的工作方式与M:M关系的工作方式不同(显然),但我认为通过适当的配置,您可以获得与M:M关系相同的输出。
基本上,我需要在path_offer中添加另一个字段(position)。
我以为我已经使其工作了,直到我尝试使用$path->getOffers(),它返回一个PersistentCollection而不是我认为被强制的(Offer的ArrayCollection)。 无论如何,在当前表格内,我有两个条目:一个路径对应两个优惠。 $path->getOffers()返回一个PathOffer的PersistantCollection,其中只附加了一个Offer而不是两个。
我的问题是如何真正使用这些类型的关系? 因为我需要它与我正在工作的项目的许多其他方面(许多M:M集合也需要定位)
我的代码如下!
基本上,我需要在path_offer中添加另一个字段(position)。
我以为我已经使其工作了,直到我尝试使用$path->getOffers(),它返回一个PersistentCollection而不是我认为被强制的(Offer的ArrayCollection)。 无论如何,在当前表格内,我有两个条目:一个路径对应两个优惠。 $path->getOffers()返回一个PathOffer的PersistantCollection,其中只附加了一个Offer而不是两个。
我的问题是如何真正使用这些类型的关系? 因为我需要它与我正在工作的项目的许多其他方面(许多M:M集合也需要定位)
我的代码如下!
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;
[..]