Symfony 1.4 обновляет один объект во время (или после) сохранения другого, связанного с ним - PullRequest
1 голос
/ 08 марта 2011

У меня есть форма доктрины в Symfony, которая сохраняет определенный объект в таблице в БД. Делая это, я хочу также обновить другой объект, который имеет отношение к первому, чтобы объекты обновляли отношение (один ко многим) при сохранении первого объекта.

Я действительно не знаю, возможно ли это вообще ...

Я выложу свой код, как ссылку:

Схема:

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 и Entry, потому что у Entry может быть много Pics, но первый созданный мной Pic также должен быть определен как Pic «по умолчанию», который я добавляю в Entry. поле рисунка ...

(я ранее и правильно создавал запись, поэтому теперь я должен получить новый рисунок, который будет «по умолчанию» для записи) ... В действиях по созданию для таблицы 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 (в методе создания действий Pic), просто ничего не получает, как если бы объект Pic, который $ form-> save ( ) в методе ничего нет (хотя он действительно экономит, но, может быть, на данном этапе он не зафиксирован или что-то в этом роде?)

Так что мой вопрос, я делаю это хорошо? Или где я не прав? Есть ли способ сделать то, что мне нужно? Если так, то что это? Может быть, мне нужно вмешаться в другую часть процесса сохранения Pic, но сейчас я вроде как потерян ...

Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2011

В вашем выражении "$ form-> isValid ()" if кажется, что ваша $ entrada, для которой вы вызываете updateSetPic, не установлена.

Но чтобы ответить на ваш вопрос, вы можете захотетьчтобы посмотреть на функцию postSave (), которую вы можете добавить к своему объекту (http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual / event-listeners / ru ).

...