我正在尝试为页面实体创建一个带有类别选择器的表单 - 页面可以在多个注册表中包含多个类别。
来自Page的关系 - > Category是OneToMany / ManyToOne,其中间PagesCategoryEntity具有discriminator属性(categoryRegistryId)。
我已成功找到了如何使用'实体'键入FormBuilder以创建一个多选框。但最后,我需要有多个选择框(对于每个注册表),在某处的html中有一个鉴别器值。
因此,我需要知道如何将PagesCategoryEntity的其他属性添加到Form中,然后如何在PageEntity的getter / setter中访问它们。
当然,我不能成为唯一一个在中间实体中拥有需要在表单和持久层中访问的值的人吗?
感谢您花时间看这个!
克雷格
为简洁而截断的实体和表单类。
class CategoryEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
// other properties, getters, setters, etc...
}
class PageEntity
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="PagesCategoryEntity",
* mappedBy="page", cascade={"all"},
* orphanRemoval=true, indexBy="categoryRegistryId")
*/
private $categories;
// other properties, getters, setters, etc...
}
class PagesCategoryEntity
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\Column(type="integer")
*/
private $categoryRegistryId;
/**
* @ORM\ManyToOne(targetEntity="CategoryEntity")
* @ORM\JoinColumn(name="categoryId", referencedColumnName="id")
*/
private $category;
/**
* @ORM\ManyToOne(targetEntity="PageEntity", inversedBy="categories")
* @ORM\JoinColumn(name="entityId", referencedColumnName="pageid")
*/
private $page;
}
class PageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('categories', 'entity', array(
'class' => 'MyCoolBundle:CategoryEntity',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->where('c.parent = :parent')
->setParameter('parent', 19)
->orderBy('c.name', 'ASC');
},
'property' => "name",
'multiple' => true,
'required' => false,
'empty_data' => null,
));
}
}
答案 0 :(得分:2)
然后试试这个:
->add('categories',
'entity',
array(
'class'=>'Acme\MycoolBundle\Entity\Category',
'property'=>'name',
'query_builder' => function (\Acme\MycoolBundle\Entity\CategoryRepository $repository)
{
return $repository->createQueryBuilder('c')
->where('c.parent = :parent')
->setParameter('parent', 19)
->add('c.name', 'ASC');
}
)
);
尝试创建一个类别存储库,如果你没有并根据你的需要调整脚本它对我有用!
答案 1 :(得分:1)
尝试使用Collection而不是使用Entity!
集合用于一对多/多对一
你可以尝试使用symfony cookbook的教程来收集表格 http://symfony.com/doc/current/cookbook/form/form_collections.html
我希望它有所帮助;)