在没有 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 注释的情况下填充字段集的主要内容,如果未能解决你的问题,请参考以下文章

我如何在没有订单的情况下填充托盘架存储?

如何在没有循环的情况下填充 char 数组

如何在没有 flashvars 的情况下使用 JavaScript 自动填充弹性输入?

如何在没有数据库的情况下填充内容提供程序

按钮的填充在没有背景的情况下不起作用

Apache Cayenne 是不是可以在没有数据库的情况下预填充 ObjectContext?