Заполнить набор полей без аннотации Doctrine-ORM

гип,

Можно ли заполнить набор полей без сопоставления соответствующего атрибута с аннотацией doctrine-orm?

Моя проблема в том, что у меня есть объект с именем Offer, у меня есть OfferForm, и с помощью этой формы я хочу иметь возможность редактировать другой объект с именем 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, все будет работать нормально, набор будет заполнен данными с адреса. Вот атрибут адреса в объекте «Предложение»:

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

Если я удалю аннотацию, набор адресов не будет заполнен адресными данными:

private $address;

даже если я установлю адрес в контроллере:

$offer->setAddress($address);

Проблема в том, что я не хочу иметь отношение от предложения к адресу в базе данных (с отношением один-к-одному), но в остальном это, похоже, не работает 🙁

0

Решение

Я не уверен, полностью ли я отвечу на ваш вопрос, но постараюсь ответить.

Если вам не нужен столбец адресов в таблице предложений в базе данных, но вы все равно хотите связать их, вам следует определить 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;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]