0

我正在使用 Propel 1.4.2 从事 Symfony 1.4 项目。

我有 2 个相关的表。车间和培训师,这是由包含车间ID和培训师ID的连接表(车间培训师)映射的多对多关系。

在我的研讨会表格中,我有一个用于将培训师添加到研讨会的选择框。问题是当车间是新的(创建)我得到一个错误:

Cannot add or update a child row: a foreign key constraint fails

发生这种情况是因为,当保存 Workshop_trainers 关系时,workshop_id 字段为空。难道 Propel 不够聪明,无法知道表之间存在关系并首先保存基础对象吗?我做错了什么?

我的教练列表小部件。

$this->widgetSchema['workshop_trainer_list'] = new sfWidgetFormChoice(array('choices' => $trainers, 'multiple' => true, ));

谢谢你的帮助。

4

1 回答 1

0

这不是解决问题,但这是解决此问题的最简单实用的解决方案

在表单中,如果对象是新对象(还没有 ID),只需停用 Workshop_trainer_list 字段。

就像是:

if ($this->getObject()->isNew())
{
  $this->offsetUnset('workshop_trainer_list'); // not sure of that method name
}

更好的解决方案是先更新 doSave 方法以获取 ID,如下所示:

protected function doSave($con = null)
{
    $isNew = $this->getObject()->isNew();
    if (null === $con)
    {
      $con = $this->getConnection();
    }

    // retrieve the value of workshop_trainer_list here and remove it from the form
    $trainers = ...
    $this->offsetUnset('workshop_trainer_list');

    // save without it
    parent::doSave($con);

    // add it back
    $this->getObject()->set...

    // save
    $this->getObject()->save($con);
  }
于 2013-05-02T04:02:27.437 回答