symfony2 构建表单实体 oneToMany
Posted
技术标签:
【中文标题】symfony2 构建表单实体 oneToMany【英文标题】:symfony2 build form entity oneToMany 【发布时间】:2013-04-19 01:06:58 【问题描述】:我正在学习 symfony 框架,遇到了一个大问题。
我有两个数据库表:类别(主键:categoryid)和产品(主键:productid 和外键:categoryid)。
在Controller中添加一个“editAction”用于编辑产品数据(包括字段categoryid)并保存在数据库中。
表单必须包含一个用于对产品进行分类的类别下拉列表。
代码:
ORM yml 中的关系
实体:产品 ...
manyToOne:
category:
targetEntity: Category
inversedBy: products
joinColumn:
name: category_categoryid
referencedColumnName: categoryid
实体:类别 ...
oneToMany:
products:
targetEntity: Product
mappedBy: category
表格/类型 产品类型
public function buildForm(FormBuilderInterface $builder, array $options)
...
$builder->add('category_categoryid', 'entity',
array('class' => 'SysCatalogoBundle:Category',
'property' => 'name',));
...
产品控制器
public function editAction(Request $request)
$id = 1;
$em = $this->getDoctrine()->getManager();
$products= $em->getRepository('SysCatalogoBundle:Product')->find($id);
$form = $this->createForm(new ProductType(), $products);
...
视图使用元素中的类别列表呈现表单,但未选择产品类别(保存在数据库中)。我证明使用类型“query_builder”但不起作用,也尝试使用类“新类别”也不起作用。如果我将“选择”类型与更简单的数组 (array(1,2,3)) 一起使用,则选择该类别。
可能是什么问题? ORM实体的关系? 我遵循官方 symfony2 文档。
非常感谢您的帮助! (对不起我的英语)
【问题讨论】:
如果您调试(或var_dump
)在您的编辑控制器操作中$products->category
是否有效?
【参考方案1】:
您没有在表单构建器中使用 orm 映射。尝试将 Form/Type ProductType 更改为:
public function buildForm(FormBuilderInterface $builder, array $options)
...
$builder->add('category', 'entity', array());
...
【讨论】:
【参考方案2】:我认为 Symfony 的官方文档中几乎涵盖了解决方案。 http://symfony.com/doc/current/book/doctrine.html#add-mapping-information
【讨论】:
以上是关于symfony2 构建表单实体 oneToMany的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行
Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?