在奏鸣曲管理包中更新复合键的问题

时间:2012-09-24 14:12:27

标签: symfony doctrine-orm symfony-sonata sonata-admin

我是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();    
   }

此处useridcityid是复合键。

我能够成功创建新记录。但是,通过更改任何一个复合键在同一记录上进行更新会产生问题。

记录在数据库中成功更新,但会抛出异常

unable to find the object with id : 1~1 

其中1~1是更新前用户和城市的id。我如何解决此异常?

提前致谢。

1 个答案:

答案 0 :(得分:0)

看来,您正在尝试手动创建/更新M:N关系的记录。 这不是必需的,因为Dotrine ORM会在中间表中为M:N关系自动创建或删除这些记录。

   
    <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,
                ));