在我的一個表單中,我希望有一個下拉列表(sfWidgetFormChoice),其中通過在數據庫上執行查詢來動態生成選項。如何使用數據庫查詢的結果動態填充Symfony選擇小部件
爲了更精確一點,我將列出表中所有的版本。查詢看起來是這樣的:
select distinct version from mytable order by version desc
我有什麼事這麼遠,但不起作用:
class myForm extends sfForm
$query = "select distinct version from mytable order by version desc";
$versions = Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc($query);
public function configure()
$this->setWidgets(array('version' => new sfWidgetFormChoice(array('choices' => self::$versions))));
編輯:
Thansk傢伙對你的答案!非常感激!
無論如何,您的解決方案基於具有表模型。我寧願直接擁有PDO,因爲它速度更快。
在Symfony Documentation我找到了我在「使用原始SQL查詢」下查找的內容。
所以我伸出我的表單與此落得:
class myForm extends sfForm
{
public function getVersions()
{
$connection = Doctrine_Manager::connection();
$query = "select distinct version from mytable order by version desc";
$statement = $connection->prepare($query);
$statement->execute();
$resultset = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
return $resultset;
}
public function configure()
{
$this->setWidgets(array('version' => new sfWidgetFormChoice(array('choices' => self::getVersions()))));
}
}
由於這是我的下拉列表的結果得到妥善裏裝的是我的表,耶!但我也得到警告:
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 196
Warning: join() [function.join]: Invalid arguments passed in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 141
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 196
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/debug/sfDoctrineConnectionProfiler.class.php on line 117
任何想法我在做什麼錯在這裏???奇怪的下拉菜單看起來不錯。
這是一個非常糟糕的形式和小部件的使用,它根本不是MVC。帶有自定義查詢的'sfWidgetFormDoctrineChoice'絕對是您的選擇。 – DevAntoine