【发布时间】:2012-01-04 17:28:05
【问题描述】:
我创建了一个表单,我在其中嵌入了另一个表单。我的问题是关于这个嵌入式表单 - 我正在使用一个 sfWidgetFormDoctrineChoice 小部件,其中选项 multiple 设置为 true。此嵌入式表单的配置方法的代码:
public function configure()
{
unset($this['prerequisite_id']);
$this->setWidget('prerequisite_id', new sfWidgetFormDoctrineChoice(array(
'model' => 'Stage',
'query' => Doctrine_Query::create()->select('s.id, s.name')->from('Stage s')->where('s.workflow_id = ?', $this->getOption('workflow_id') ),
'multiple' => true
)));
$this->setValidator('prerequisite_id', new sfValidatorDoctrineChoice(array(
'model' => 'Stage',
'multiple' => true,
'query' => Doctrine_Query::create()->select('s.id, s.name')->from('Stage s')->where('s.workflow_id = ?', $this->getOption('workflow_id') ),
'column' => 'id'
)));
}
我取消设置 prerequisite_id 字段,因为它包含在基本表单中,但我希望它是多选。
现在,当我添加验证器时,一切似乎都正常工作(它通过了验证),但如果发送了多个选择,则保存记录似乎有问题。
我在提交表单后收到此 PHP 警告:
警告:strlen() 期望参数 1 是字符串,数组在 D:\Development\www\flow_dms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\database\sfDoctrineConnectionProfiler.class.php 在第 198 行
还有更多——我知道,为什么——在 symfony 的调试模式下,我可以在堆栈跟踪中看到以下内容:
在 Doctrine_Connection->exec('INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) 值 (?, ?)', array(array('12', '79'), '103'))
所以,Symfony 所做的就是向 Doctrine 发送一系列选择 - 正如我在调试 sql 查询中看到的那样,Doctrine 无法正确呈现查询。
任何想法如何解决这个问题?我需要为两种选择生成两个查询:
INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) VALUES (12, 103);
INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) VALUES (79, 103);
stage_id 总是相同的(我的意思是,它被嵌入的表单设置在此表单之外)。
我已经花了 4 个小时来解决这个问题,所以也许有人可以提供一些帮助。
【问题讨论】:
-
改为编辑可以回答的问题可以接受答案