2

私はソナタ管理バンドルを初めて使用します

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 です。この例外を解決するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

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> 
  • City エンティティに __toString() メソッドを追加します。

    //...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,
                ));
    
于 2012-10-07T17:35:29.360 に答える