symfony — Дополнительное поле в автоматически сгенерированной форме модели

#symfony1 #doctrine #field

#symfony1 #доктрина #поле

Вопрос:

В моем приложении должно быть 3 таблицы. — event , event_category и event_category_connection . Которое представляет собой отношение «многие ко многим» между двумя первыми таблицами. Что я пытаюсь сделать, так это добавить sfWidgetFormDoctrineChoice с категориями в EventForm (которые автоматически генерируются с помощью Symfony — doctrine model ), что после сохранения события я смогу автоматически добавлять соединение между новым событием и уже существующими категориями.

 $this->widgetSchema['event_category_id'] = new sfWidgetFormDoctrineChoice(array(
  'model' => 'EventCategory', 
  'add_empty' => false, 
  'multiple'=>"true",
  'expanded'=>true));
$this->setValidator('event_category_id', new sfValidatorDoctrineChoice(array(
  'model' => 'EventCategory', 
  'required' => false)));
  

Это то, что я добавил в автоматически сгенерированную EventForm . Я понимаю, что во время операции создания новый объект сохраняется с помощью $form->getObject()->save() функции. Это то место, где я получаю сообщение об ошибке (неизвестное свойство записи / связанный компонент).

Есть предложения, как я могу справиться с этой операцией. Это то, что я пытаюсь закодировать:

Одним действием -> сохранить объект -> получить идентификатор нового объекта -> сохранить отношение многие ко многим между категориями и новым объектом.

Krzycho.

Комментарии:

1. Можете ли вы опубликовать событие вашей схемы, event_cetegory и event_category_connection?

Ответ №1:

Сначала вам нужно выполнить $form->save() , затем вы сохраняете свои отношения (это один из подходов, вероятно, есть много способов добраться туда):

   protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {    
      $obj = $form->save();

      $this->saveRelations($request, $obj);
      // save the event_category objects in an array: $event_categories
      // $obj->EventCategory = $event_categories;
      // $obj->save();
    }
    // ...
  }