在没有 Doctrine-ORM 注释的情况下填充字段集
Posted
技术标签:
【中文标题】在没有 Doctrine-ORM 注释的情况下填充字段集【英文标题】:Populate fieldset without Doctrine-ORM annotation 【发布时间】:2014-10-02 13:26:05 【问题描述】:你,
是否可以填充字段集,而无需使用学说-orm 注释映射相应的属性?
我的问题是我有一个名为 Offer 的实体,我有一个 OfferForm,并且我希望能够使用此表单编辑另一个名为 Address 的实体。 Address 是一个名为 AddressFieldset 的字段集,它被添加到 OfferForm 中,如下所示:
class OfferForm extends Form
public function __construct($em)
parent::__construct('offer');
$this->setHydrator(new DoctrineHydrator($em))
->setObject(new Offer());
$this->add(new AddressFieldset($em));
AddressFieldset 看起来像这样:
class AddressFieldset extends Fieldset
public function __construct($em)
parent::__construct('address');
// ... form-fields
如果我将 Offer 实体中的地址映射到 ORM 映射,一切正常,fiedset 将填充来自地址的数据。这是 Offer 实体中的地址属性:
/**
* @ORM\OneToOne(targetEntity="\Contact\Entity\Address")
*/
private $address;
如果我删除注释,地址字段集不会填充地址数据:
private $address;
即使我在控制器中设置了地址:
$offer->setAddress($address);
问题是,我不想在数据库中建立从报价到地址的关系(使用一对一关系),否则它似乎不起作用:-(
【问题讨论】:
【参考方案1】:我不确定我是否完全是你的问题,但我会尽力回答。
如果您不希望数据库中的商品表中的地址列但仍想关联它们,则应定义从地址到商品的one-to-one
, BiDirectional
关系,以便地址成为拥有方并提供相反方.
导致数据库中地址表中的报价列。这对我来说听起来不合逻辑,我会说报价应该是拥有方,但有可能像这样......
所以在你的地址:
/** ONE-TO-ONE BIDIRECTIONAL, OWNING SIDE
* @var Offer
* @ORM\OneToOne(targetEntity="Application\Entity\Offer", inversedBy="address")
*/
private $offer;
在您的报价中:
/** ONE-TO-ONE BIDIRECTIONAL, INVERSE SIDE
* @var Address
* @ORM\OneToOne(targetEntity="Application\Entity\Address", mappedBy="offer")
*/
private $address;
【讨论】:
这也可以,但正如您已经注意到的那样,它会在地址表中产生一个报价列,我不想这样做。我发现实体需要在数据库中建立某种关系,换句话说,它们需要在 db-model 中连接。看来我想要的根本不可能。但是感谢您的帮助:-) 我不明白您希望如何在不在数据库中添加列的情况下关联某些内容?如果数据库中没有offer和address之间的关系,你怎么知道哪个地址属于哪个offer? 地址并不真正属于报价,我只是希望能够在报价表单中编辑地址(无论哪个地址)。这就是为什么我不想拥有那个地址offer 关系。以上是关于在没有 Doctrine-ORM 注释的情况下填充字段集的主要内容,如果未能解决你的问题,请参考以下文章