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 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?

Symfony2 OneToMany 关系

Symfony2 将自定义字段添加到表单构建器

Symfony 2.1 Sonata 管理包 OneToMany

Symfony2 3 个实体之间的映射