2011-03-07 5 views
1

Symfonyには、特定のオブジェクトをDBのテーブルに保存するドクトリンフォームがあります。 これを行うことで、最初のオブジェクトとの関係を持つ別のオブジェクトも更新したいので、オブジェクトは最初のオブジェクトが保存されるときに更新される関係(一対多)を取得します。これは可能な限り、symfony 1.4関連する別のオブジェクトを保存中または保存した後で一部のオブジェクトを更新する

私は本当に参考に、自分のコードを投稿します...

を知らない:

スキーマ:

Entry: 
    columns: 
    pic: { type: integer, notnull: false, default: null } 
    relations: 
    Pic: 
     local: pic 
     foreign: id 
     onDelete: SET NULL 
    Pics: 
     type: many 
     class: Pic 
     local: id 
     foreign: entry_id 


Pic: 
    columns: 
    id:   { type: integer, notnull: true, primary: true, autoincrement: true } 
    entry_id: { type: integer, notnull: true, primary: true } 
    pic:  { type: string(255), notnull: true } 
    relations: 
    Entry: 
     local: entry_id 
     foreign: id 
     onDelete: CASCADE 

私は別のものを持っていますEntryがたくさんの写真を持っている可能性があるので、PicとEntryの間の多対多の関係ですが、私が作成する最初のPicは、Entry.picフィールドに設定した「デフォルトの」Picとしても定義する必要があります...

(私は以前に正しくエントリーを作成していましたので、今度はエントリーの「デフォルト」の新しいピクチャーを取得する必要があります)... Picテーブルの作成アクションでは、エントリーを更新したいそれは私がちょうど追加したとそれはそれで「デフォルト」でリンクを取得する必要があり、ブランドの新しいピック...

のPICのactions.class.phpを知っている:

public function executeCreate(sfWebRequest $request) 
    { 
    $this->form = new PicForm(); 
    $this->form->bind(
       $request->getParameter($form->getName()), 
       $request->getFiles($form->getName()) 
       ); 

    if ($form->isValid()) 
     { 
     $this->pic = $form->save(); 
     $entry = $this->pic->getEntry(); 
     $entry->updateSetPic($this->pic); 
     $this->redirect('entry_show', $entry); 
     } 
    } 

は最後に、私は「次しているupdateSetPic 'メソッドをlib/model/doctrine/Entry.class.phpファイルに保存します。

public function updateSetPic(Pic $pic) 
    { 
    $this->setPic($pic); 
    $this->save(); 
    } 

問題があります。一見、upateSetPicメソッドは、(Picアクションのcreateメソッドで)最近保存されたPicオブジェクトを受け取っても、$ form-> save()メソッドに何も含まれていないピクチャオブジェクトしかし、それは本当に節約されますが、おそらくこの段階でそれはコミットされていませんか何か?)

私の質問は、これは大丈夫ですか?それともどこが間違っていますか?私が必要とするものを磨く方法はありますか?もしそうなら、その方法は何ですか?たぶん私はPicの保存プロセスの別の部分にぶつかる必要があるかもしれませんが、私は今のところ失われています...

アイデア?

ありがとうございました!

答えて

0

"$ form-> isValid()" if文では、あなたが$ updateを呼び出すことが$ entradaに設定されていないようです。

あなたの質問に答えるには、あなたのオブジェクトに追加できるpostSave()関数(http://www.doctrine-project.org/projects/orm/1.2/docs/manual/event-listeners/en)を見てみてください。

+0

申し訳ありませんが、$ entradaは間違っています。$ entry ...私があなたに与えたリンクを確認します。ありがとう –

関連する問題