1

私はSymfonyに教義形式を持っています。それはDBのテーブルに特定のオブジェクトを保存します。これにより、最初のオブジェクトとの関係を持つ別のオブジェクトも更新したいので、最初のオブジェクトが保存されると、オブジェクトは関係(1対多)を更新します。

これが可能かどうかは本当にわかりません...

参考として、コードを投稿します。

スキーマ:

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

エントリには多数のPicが含まれている可能性があるため、PicとEntryの間には別の多対多の関係がありますが、最初に作成するPicは、Entry.picフィールドで設定した「デフォルト」の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);
      }
  }

最後に、lib / model / doctrine/Entry.class.phpファイルに次の'updateSetPic'メソッドがあります。

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

私が今抱えている問題は、(Picアクションのcreateメソッドで)最近保存されたPicオブジェクトを受け取るupateSetPicメソッドが、$ form-> save()メソッドが持っているPicオブジェクトのように何も受け取らないことです。その中には何もありません(それは本当に節約できますが、おそらくこの段階ではコミットされていませんか?)

だから私の質問は、私はこれを大丈夫ですか?または私はどこが間違っていますか?必要なことを達成する方法はありますか?もしそうなら、その方法は何ですか?Picの保存プロセスの別の部分に参加する必要があるかもしれませんが、今では少し迷っています...

何か案は?

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

4

1 に答える 1

0

あなたの "$form->isValid()" if ステートメントでは、 updateSetPic を呼び出している $entrada が設定されていないようです。

しかし、あなたの質問に答えるために、オブジェクトに追加できる postSave() 関数を見たいと思うかもしれません ( http://www.doctrine-project.org/projects/orm/1.2/docs/manual/event-listeners/エン)。

于 2011-04-28T23:21:00.147 に答える