Symfony: обновить связанную таблицу с идентификатором для новых сохраненных записей? - PullRequest
0 голосов
/ 12 января 2010

У меня есть базовая таблица с именем SnUser и связанная таблица SnAltceva:

SnUser:
    columns:
        name: { type: string(100) }
        age: { type: integer(1) }
        level_id: integer
    relations:
        SnAltceva: { local: id, foreign: user_id }

SnAltceva:
    columns:
        user_id: integer
        field_1: string(10)
        field_2: integer(1)
    relations:
        SnUser:
            local: user_id
            foreign: id
            onDelete: CASCADE 

Я создал форму SnUser и внедрил ее с новой формой SnAltceva. Все работает хорошо, таблица sn_user обновляется с новой записью, также sn_altceva, но user_id имеет значение NULL.

Я хочу также обновить это поле, добавив только что из SnUser. Я подозреваю, что мне нужно переопределить save() из /lib/model/doctrine/SnUser.class.php, но я не совсем уверен, как.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Нашли:

class SnUserForm extends BaseSnUserForm {
    public function configure() {
       // get the SnAltceva object reference (embeded one)
       // if not, create a new one
       $altObj = $this->getObject()->getSnAltceva();
       if( is_null($altObj) ) {
            $altObj = new SnAltceva();
            $this->getObject()->setSnAltceva($altObj);
       }

       // create the form with the already linked obj
       $formAlt = new SnAltcevaForm($altObj);

       $this->embedForm('altceva', $formAlt);
    }
}

Нет необходимости переопределять метод save () в классе SnUser (). Соответствующая таблица будет автоматически сохранена с правильным (новым) идентификатором.

Надеюсь, это поможет другим в будущем.

0 голосов
/ 12 января 2010

Вам необходимо переопределить сохранение, чтобы сначала сохранить объект пользователя. затем получите объект из встроенной формы для Altceva и установите для него идентификатор пользователя. затем сохраните этот объект.

sfGuardPlugins (и Doctrine, и Propel) являются хорошим примером этого, когда дело доходит до сохранений User / UserProfile. Вы можете использовать это как ссылку.

...