symfony 1.4和推进 - 外部约束失败保存关系

时间:2013-05-01 15:22:24

标签: foreign-keys symfony-1.4 propel

我正在使用Propel 1.4.2进行Symfony 1.4项目。

我有2张相关的表格。研讨会和培训师是由连接表(workshop_trainers)映射的多对多关系,其中包含workshop_id和trainer_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'=> $教练,                 'multiple'=>真正,             ));

感谢您的帮助。

1 个答案:

答案 0 :(得分: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);
  }