我正在使用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'=>真正, ));
感谢您的帮助。
答案 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);
}