我是sonata admin bundle的新手
我在sonata admin bundle中创建了一个表单。
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
->add('userid', null, array('label' => 'User'))
->add('cityid', null, array('label' => 'City Name'))
->end();
}
此处userid
和cityid
是复合键。
我能够成功创建新记录。但是,通过更改任何一个复合键在同一记录上进行更新会产生问题。
记录在数据库中成功更新,但会抛出异常
unable to find the object with id : 1~1
其中1~1是更新前用户和城市的id。我如何解决此异常?
提前致谢。
答案 0 :(得分:0)
看来,您正在尝试手动创建/更新M:N关系的记录。 这不是必需的,因为Dotrine ORM会在中间表中为M:N关系自动创建或删除这些记录。
检查您的数据库结构中是否存在正确的关系。您可以在某些数据库建模应用程序中可视化您的数据库结构,例如Mysql Workbench。
将您的数据库结构正确映射到doctrine配置文件。 对数据库进行逆向工程可能有所帮助:http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html 在doctrine配置文件中,“User.orm.xml”应该是多对多关系。例如:
<many-to-many field="cityId" target-entity="City" inversed-by="userId">
<join-table name="user_has_city">
<join-columns>
<join-column name="id_user" referenced-column-name="id_user"/>
</join-columns>
<inverse-join-columns>
<join-column name="city_id" referenced-column-name="city_id"/>
</inverse-join-columns>
</join-table>
</many-to-many>
将__toString()方法添加到您的City实体:
//...some code of entity...
public function __toString()
{
return $this->name; //or $this->title, $this->label etc. - based on the name of variable, which stores the city's name.
}
在文件AcmeExampleBundle / Admin / UserAdmin.php中:
$formMapper
->add('cityId', 'sonata_type_model', array(
'required' => false,
'label' => $this->trans('City name'),
'expanded' => true,
));