0

我正在使用sfWidgetFormDoctrineChoice在表单中构建选择元素。这就是我的使用方式:

// Fill maquinaemisorid
$this->widgetSchema['maquinaemisorid'] = new sfWidgetFormDoctrineChoice(array('model' => 'SdrivingMaquina', 'add_empty' => 'Seleccione una Máquina', 'table_method' => 'fillChoice'));

// Fill idoperador
$this->widgetSchema['idoperador'] = new sfWidgetFormDoctrineChoice(array('model' => 'SdrivingOperador', 'add_empty' => 'Seleccione un Operador', 'table_method' => 'fillChoice'));

// Fill idturno
$this->widgetSchema['idturno'] = new sfWidgetFormDoctrineChoice(array('model' => 'SdrivingTurno', 'add_empty' => 'Seleccione un Turno', 'table_method' => 'fillChoice')); 

对于第一个小部件,一切都很好,并且应该从数据库中获取值,但是对于第二个和第三个不起作用。您可能会注意到,我fillChoice在所有小部件中调用了一个方法table_method。这是三个的代码:

SdrivingMaquinaTable.class.php

public function fillChoice() {
    $id_empresa = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();
    return Doctrine_Core::getTable('SdrivingMaquina')->createQuery('a')->where('a.idempresa = ?', $id_empresa)->execute();
}

SdrivingOperadorTable.class.php

public function fillChoice() {
    $id_empresa = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();
    return Doctrine_Core::getTable('SdrivingOperador')->createQuery('a')->where('a.idempresa = ?', $id_empresa)->execute();
}

SdrivingTurno.class.php

public function fillChoice() {
    $id_empresa = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();
    return Doctrine_Core::getTable('SdrivingTurno')->createQuery('a')->where('a.idempresa = ?', $id_empresa)->execute();
}

该方法始终相同,只是更改了用于每个类的表。我检查了生成的查询,一切都很好,如果我在 phpMyAdmin 上运行每个查询,例如,会获取多个值,idoperador并且idturno只呈现最新的值。这是一种非常罕见的行为,我找不到错误或错误,因此我需要一些帮助或建议。

作为补充,我尝试了这个SdrivingRegistrosEmisoresForm.class.php(这是生成小部件的地方):

$id_empresa = $this->current_user->getSfGuardUserProfile()->getIdempresa();
$choices_operador = Doctrine_Core::getTable('SdrivingOperador')->createQuery('a')->where('a.idempresa = ?', $id_empresa)->execute();

$this->widgetSchema['idoperador'] = new sfWidgetFormSelect(array('choices' => $choices_operador));

这种方式工作正常,但id对于每个获取的项目的含义并不正确:

id      item     real_id
0       Item1    2
1       Item2    16
2       Item4    3

我在这个话题中谈到了这个,但没有得到任何答案,有什么帮助吗?

4

1 回答 1

1

sfWidgetFormDoctrineChoice中所述,如果选项 *table_method* 返回一个类似于您的方法的集合,它会使用选项 *key_method* 和method呈现选择。默认情况下,它们分别是getPrimaryKey()和 *__toString()*。

我们可以检查一下 schema.yml 和 __toString() 吗?

至于你的最后一个例子,sfWidgetFormSelect的选项应该是一个数组而不是 *Doctrine_Collection*

于 2013-06-28T09:54:49.307 回答