Я создал форму, в которую я вставил другую форму.Мой вопрос об этой встроенной форме - я использую виджет sfWidgetFormDoctrineChoice с параметром множественного набора, установленным в значение 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 я вижу следующее в трассировке стека:
at Doctrine_Connection-> exec ('INSERT INTO stage_has_prerequisites (prerequisite_id, stage_id) VALUES (?,?)', массив (массив ('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 часа на решение этой проблемы, поэтому, возможно, кто-то сможет оказать некоторую помощь.