当我创建一个产品时,我使用sonata_type_collection作为我的关系…它就像一个符咒,值被正确地插入到数据库中。
然而,如果我然后去我的产品上的显示或编辑,我没有得到任何错误,但值没有显示,就像我从未添加它们一样。
例如:在我的产品中,我可以添加几个类别:
->add('category', 'sonata_type_collection',
array(
'required' => false,
'label' => 'Category',
),
array(
'edit' => 'inline',
'inline' => 'table',
//'sortable' => 'id',
)
)
我的ProductCategoryAdmin很简单:
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('categoryId')
;
}
所以我给我的产品添加了2个类别并创建了它。它们被插入数据库。
现在如果我点击编辑产品,它会显示0个类别…为什么呢?除了这个类别集合,所有其他集合都工作正常。
数据库中的ProductCategory是否同时具有productId和categoryId ?如果您的产品类别在"显示"one_answers"编辑产品"中都没有显示,则似乎没有将productId插入到"产品类别"中。
我通常在sonata_type_collection上添加'by_reference' => false来强制调用所有setter。
官方文档关于by_reference: http://symfony.com/doc/current/reference/forms/types/collection.html#by-reference
有了它,你的代码将是:
->add('category', 'sonata_type_collection',
array(
'required' => false,
'by_reference' => false,
'label' => 'Category',
),
array(
'edit' => 'inline',
'inline' => 'table',
//'sortable' => 'id',
)
)
另外,我要将字段命名为categories而不是category:)