2011-06-06 87 views
3

您可以通過擴展sfBaseTask來創建symfony「任務」有關更多詳情,請參閱http://www.symfony-project.org/cookbook/1_1/en/tasks如何從symfony任務的配置方法訪問數據庫

但是,我看不到如何在configure部分設置數據庫連接。我想這樣做,以便我可以讓detailedDescription屬性顯示一些僅在數據庫中定義的選項。

這樣做的最好方法是什麼?

+0

有什麼選擇嗎?只要按照常規的方式來做就行了......:getTable – Dziamid 2011-06-06 21:13:56

+0

我已經重寫了這個問題來澄清問題。 – rlandster 2011-06-07 04:34:22

回答

1

如果你看看路上的symfony creates a custom Task Skeleton./symfony generate:task yourTaskName),你會看到代碼,看起來像這樣的執行函數內部:

protected function execute([..]) 
{ 
    $databaseManager = new sfDatabaseManager($this->configuration); 
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); 
[..] 

這段代碼的問題是,它使用默認配置,但如果你知道你要開什麼連接(檢查database.ymlschema.yml找出名字)應該是很容易的,其代碼如下所示:

protected function configure() 
{ 
     $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend'‌​, 'prod', true)); 
     $connection = $databaseManager->getDatabase("the_name_of_your_connection")->getConnection(); 
[..] 

然後你就可以訪問ÿ我們的模型通常的方式,例如:

$myItem = Doctrine_Core::getTable('item')->find(14); 
    echo $myItem->getId(); 
+0

代碼'sfDatabaseManager($ this-> configuration)'不起作用; '$ databaseManager = new sfDatabaseManager(sfProjectConfiguration :: getApplicationConfiguration('frontend','prod',true))' – rlandster 2011-06-10 05:14:40

+0

所以,我修改它來添加它!謝謝 – guiman 2011-06-10 14:03:33

1

如果您使用的是Doctrine,那麼最好的方法是在php模型文件中定義一個方法。該模型的文件位於/PROJECT/lib/model/doctrine/MODEL_NAMETable.class.php

要小心MVC模型!

一旦你有你自己的方法,調用它的方法是:Doctrine_Core::getTable('TABLE_NAME')->miNewMethod($params-if-any);

我希望我來幫你!