2013-06-28 77 views
0

我正在使用sfWidgetFormDoctrineChoice在表單中構建選擇元素。這是我如何使用: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作爲應但是對於第二個和第三個是行不通的。您可能會注意到我在所有小部件table_method中調用方法fillChoice。這是三碼:

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

sfWidgetFormDoctrineChoice指出,如果選項* table_method *返回集合喜歡你的方法,它呈現的選項* key_method *和方法選擇。默認情況下,它們分別是getPrimaryKey()和* __ toString()*。

我們可以檢查你的schema.yml和__toString()嗎?

至於你的最後一個例子選項選擇的 sfWidgetFormSelect應該是一個數組的不是* Doctrine_Collection *