0

我正在学习 symfony 框架并且有一个大问题。

我有两个数据库表:类别(主键:categoryid)和产品(主键:productid 和外键:categoryid)。

在控制器中添加一个“editAction”用于编辑产品数据(包括字段 category_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);


...
}

该视图使用元素中的类别列表呈现表单,但未选择产品类别(保存在 DB 中)。我证明使用类型“query_builder”但不起作用,也尝试使用类“新类别”也不起作用。如果我将“选择”类型与更简单的数组 (array(1,2,3)) 一起使用,则选择该类别。

哪个可能是问题?ORM实体的关系?我遵循官方 symfony2 文档。

非常感谢您的帮助!(对不起我的英语)

4

2 回答 2

1

我认为 Symfony 的官方文档中几乎涵盖了解决方案。 http://symfony.com/doc/current/book/doctrine.html#add-mapping-information

于 2013-04-25T05:39:19.413 回答
1

您没有在表单构建器中使用 orm 映射。尝试将 Form/Type ProductType 更改为:

public function buildForm(FormBuilderInterface $builder, array $options) { 
...

    $builder->add('category', 'entity', array());

... 
}
于 2013-04-19T17:45:25.880 回答