одна форма - добавить в две таблицы - PullRequest
0 голосов
/ 13 июня 2011

как я могу в Symfony 1.4 и Doctrine создать одну форму, которая добавит данные в две таблицы?По умолчанию Symfony генерирует форму для одной таблицы и модуля.в какой момент я могу отредактировать его и добавить свои собственные поля?http://www.symfony -project.org / jobeet / 1_4 / Doctrine / ru / 03 создан.Я хотел бы, например, добавить поле с новой категорией.

# config/doctrine/schema.yml
JobeetCategory:
  actAs: { Timestampable: ~ }
  columns:
    name: { type: string(255), notnull: true, unique: true }

JobeetJob:
  actAs: { Timestampable: ~ }
  columns:
    category_id:  { type: integer, notnull: true }
     (...)
    expires_at:   { type: timestamp, notnull: true }
  relations:
    JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs } 

в эту форму добавить только id JobeetJob.Как я могу добавить в JobeetCategory?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Вы должны переопределить метод сохранения в вашей модели (скажем, в модели JobeetJob).И сохраните обе модели в транзакции.Ниже я сохраняю таблицы продуктов и составных продуктов.Но не забывайте, что метод сохранения должен иметь 2 функции: insert и update

public function save(Doctrine_Connection $conn = null){
  try {
      $conn->beginTransaction();

      $isNew = $this->isNew();         
      parent::save($conn); #Save Product

      $modelName = $this->moduleArray[$moduleName];

      $productId = $this->getId();

      if($isNew){ #CREATE new Composite Product and set Product ID and Module Name to it.

          $cp = new CompositeProduct();
          $cp->setRelatedModelID($productId);
          $cp->setRelatedModelName($modelName);
          $cp->setTitle($this->getTitle());
          $cp->save();

      }else{# UPDATE the Composite Product

          $query = Doctrine_Core::getTable('CompositeProduct')
                                ->createQuery('cp')
                                ->where('cp.relatedmodelname = ?',  $modelName)
                                ->andWhere('cp.relatedmodelid = ?', $productId);
          $cp = $query->fetchOne();

          $cp->setTitle($this->getTitle());
          $cp->save();
      }

      $conn->commit();
  }catch(Doctrine_Exception $e){
      $conn->rollback();
  }

}

1 голос
/ 14 июня 2011

Вы можете встроить отношение JobeetCategory в форму JobeetJob.Это позволит вам создать работу и категорию.Найдите метод embedRelation () класса sfForm.

...