2011-03-07 4 views
1

У меня есть форма доктрины в Symfony, которая сохраняет определенный объект в таблице в БД. Таким образом, я хочу также обновить другой объект, который имеет отношение к первому, поэтому объекты получают отношение (один-ко-многим), обновляемое по мере сохранения первого объекта.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 

У меня есть еще один отношение «многие ко многим» между Pic и Entry, потому что в Entry может быть много фотографий, но первый созданный Pic I также должен быть определен как «Default» Pic, который я ставил в поле Entry.pic ...

(я ранее и правильно создал запись, так что теперь я должен получить новый Pic, который будет «по умолчанию» для Entry) ... В действиях create для таблицы 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/модели/доктрина/файл Entry.class.php:

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

проблема у меня есть правильный п ow - это то, что, по-видимому, метод upateSetPic, получивший недавно сохраненный объект Pic (в методе создания действий Pic), просто ничего не получает, как если бы объект Pic, который метод $ form-> save() ничего не имеет в нем (даже хотя, на самом деле это экономит, но, может быть, на этом этапе это не совершается или что-то в этом роде?)

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

Любые идеи?

Спасибо!

ответ

0

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

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

+0

Извините, $ entrada неверен, он должен быть $ entry ... Я проверю ссылку, которую вы мне дали. благодаря –