sfWidgetFormDoctrineChoice:错误,错误还是什么?

时间:2013-06-28 03:55:33

标签: symfony1 symfony-1.4

我正在使用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')); 

对于第一个小部件,一切都很好,值应该从DB中获取,但对于第二个小部件,第三个小部件不起作用。您可能会注意到我在所有小部件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上运行每个,例如在idoperadoridturno中提取多个值,只会呈现最新的。这是一种非常罕见的行为,我找不到错误或错误,所以我需要一些帮助或建议。

作为一个adition,我在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

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

1 个答案:

答案 0 :(得分:1)

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

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

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