гип,
Можно ли заполнить набор полей без сопоставления соответствующего атрибута с аннотацией 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);
Проблема в том, что я не хочу иметь отношение от предложения к адресу в базе данных (с отношением один-к-одному), но в остальном это, похоже, не работает 🙁
Я не уверен, полностью ли я отвечу на ваш вопрос, но постараюсь ответить.
Если вам не нужен столбец адресов в таблице предложений в базе данных, но вы все равно хотите связать их, вам следует определить 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;
Других решений пока нет …