У меня есть две сущности Доктрины, которые имеют отношение один ко многим, как это:
Лицензия
class License {
/**
* Products this license contains
*
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="LicenseProductRelation", mappedBy="license")
*/
private $productRelations;
}
LicenseProductRelation:
class LicenseProductRelation {
/**
* The License referenced by this relation
*
* @var \ISE\LicenseManagerBundle\Entity\License
* @ORM\Id
* @ORM\ManyToOne(targetEntity="License", inversedBy="productRelations")
* @ORM\JoinColumn(name="license_id", referencedColumnName="id", nullable=false)
*/
private $license;
}
И у меня есть эта форма для объекта «Лицензия»:
class LicenseType extends AbstractType {
public function buildForm(FormBuilder $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('productRelations', 'collection',
array('type' => new LicenseProductRelationType(),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'label' => 'Produkte'));
}
}
И эта форма для сущности LicenseProductRelation:
class LicenseProductRelationType extends AbstractType {
public function buildForm(FormBuilder $builder, array $options) {
parent::buildForm($builder, $options);
$builder->add('license', 'hidden');
}
}
Формы и сущности, конечно же, содержат другие поля, которые здесь не копируются, чтобы сделать сообщение относительно коротким.
Теперь, когда я отправляю форму и связываю запрос с формой в моем контроллере, я ожидаю, что вызов $license->getProductRelations()
вернет массив объектов LicenseProductRelation ($license
- это сущность, переданная в форму, то есть объект значения запроса записываются, когда я звоню $form->bindRequest()
). Вместо этого он возвращает массив массивов, внутренние массивы, содержащие имена и значения полей формы.
Это нормальное поведение или я допустил ошибку, которая каким-то образом мешает компоненту формы понять, что License#productRelations
должен представлять собой массив объектов LicenseProductRelation?