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 でそれぞれを実行すると、複数の値が取得され、最新のものだけがレンダリングされます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
for each item fetched は正しい意味ではありません:
id item real_id
0 Item1 2
1 Item2 16
2 Item4 3
このトピックでこれについて話しましたが、何の回答も得られませんでした。