2011-02-24 26 views
1

我需要一些Symfony和Doctrine表單的幫助。從表格加載的symfony選項選項

我想要的是將選擇小部件添加到窗體,並使用數據庫中的數據加載該選擇小部件。

我有這樣的Survey.class.php:

$this->widgetSchema['service'] = new sfWidgetFormChoice(array(
    'choices' => TService::getServiceTypes(), 
    'multiple' => true, 
    'expanded' => false)); 

這是TService.class.php

class TService extends BaseTService 
{ 
    static public function getServiceTypes() 
    { 
    return Doctrine::getTable("TService") 
     ->createQuery() 
     ->select('description') 
     ->execute(); 
    } 
} 

我所得到的是兩個選擇一個選擇,那就是好,但是選項是'1'和'2',而不是服務的描述。

Sugestions?

謝謝你們

回答

0

我有一個「手動」的解決方案,但我相信有更好的方法。我只是改變了TService::getServiceTypes方法

$table = Doctrine::getTable("TService") 
    ->createQuery() 
    ->select('description') 
    ->execute(); 

$arrayServices = $table->toArray(); 
$descServices = array(); 
foreach ($arrayServices as $service){ 
    $descServices[] = $service['description']; 
} 

return $descServices; 
0

當你做./symfony doctrine:build --all,它會自動創建sfWidgetFormDoctrineChoice,如果你有正確的模式:

Survey: 
    columns: 
    tservice_id: { type: integer } 
    relations: 
    TService: 
     class: TService 
     local: tservice_id 
     foreignAlias: Surveys 

TService: 
    columns: 
    description: { type: string(100) } 
1

您應該使用sfWidgetFormDoctrineChoice,而不是手動讀取選項(其還有一個驗證器對)。但是,您仍然會遇到目前的問題。解決方案:爲您的TService對象實施__toString()魔術功能。