填充没有Doctrine-ORM注释的fieldset

时间:2014-10-02 13:26:06

标签: php orm doctrine-orm zend-framework2

HY,

是否可以填充字段集,而不必使用doctrine-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
    }
}

如果我使用ORM映射在Offer实体中映射地址一切正常,则fiedset将填充来自地址的数据。以下是商品实体中的地址属性:

/**
 * @ORM\OneToOne(targetEntity="\Contact\Entity\Address")
 */
private $address;

如果删除注释,则地址字段集不会填充地址数据:

private $address;

即使我在控制器中设置了地址:

$offer->setAddress($address);

问题是,我不想在数据库中提供与地址之间的关系(具有一对一关系),但是否则它似乎不起作用: - (

1 个答案:

答案 0 :(得分: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;