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')); 

最初のウィジェットではすべて問題なく、値は本来あるべき DB から取得されますが、2 番目のウィジェットと 3 番目のウィジェットは機能しません。お気づきかもしれませんがfillChoice、すべてのウィジェットでメソッドを呼び出していますtable_method。これは3つのコードです:

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これは非常にまれな動作であり、エラーや間違いを見つけることができないため、ここで助けやアドバイスが必要です.

追加として、私はこれを試しました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));

この方法はうまくいきますが、idfor each item fetched は正しい意味ではありません:

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

このトピックでこれについて話しましたが、何の回答も得られませんでした。

4

1 に答える 1