如何从Symfony 1.4中的任务(控制台命令)访问数据库(Doctrine连接)

本文概述

  • 检索数据库连接
  • 任务示例
有很多方法可以使用symfony命令。你可以做的一件有用的事情是使与项目数据库相关的任务自动化, 甚至创建助手方法以在开发模式下清除表等。如果你使用的是Symfony 1.4, 我们将向你快速说明如何在Symfony的” 任务” 或” 控制台” 命令中轻松访问数据库。
检索数据库连接如你所知, 你可以在./proyect/config/databases.yml文件中定义多个数据库连接。在此文件中, 你可以通过以下方式定义连接:
# You can find more information about this file on the symfony website:# http://www.symfony-project.org/reference/1_4/en/07-Databasesall:doctrine:class: sfDoctrineDatabaseparam:dsn:mysql:host=localhost; dbname=my_databaseusername: rootpassword: password

如你所见, 在此示例中, 我们使用给定的配置创建了一个名为doctrine的简单连接。因此, 在我们的代码中检索连接, 我们将使用命名的学说连接。但是, 你感兴趣的是一个非常简单的帮助程序方法, 可以将其添加到” 任务类” 以检索默认连接:
< ?php/** * This method creates a connection to the default database of your application with Doctrine. * * @return type */private function getDefaultDatabaseConnection(){$databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true)); // Get some connection stablished on the databases.yml file$databaseConnection = "doctrine"; $databaseManager-> getDatabase($databaseConnection)-> getConnection(); return Doctrine_Manager::getInstance()-> getCurrentConnection(); }

getDefaultDatabaseConnection会在你的database.yml文件中返回定义的学说连接, 但是你可以更改其他名称。
任务示例以下测试任务显示了由以下类定义的php symfony test-command:demo执行的基本示例, 你将可以在execute函数中使用数据库连接:
< ?php// ./proyect/lib/task/TestCommandTask.class.php/** * Example of Symfony 1.4 to get access to the database within a console command (task). * * @author Carlos Delgado < dev@ourcodeworld.com> */class TestCommandTask extends sfBaseTask {public function configure(){$this-> namespace = 'test-command'; $this-> name = 'demo'; $this-> briefDescription = 'This command does something'; $this-> detailedDescription = < < < EOFDescription of this command.EOF; }/*** This method creates a connection to the default database of your application with Doctrine.* * @return type*/private function getDefaultDatabaseConnection(){$databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true)); // Get some connection defined on the databases.yml file$databaseConnection = "doctrine"; $databaseManager-> getDatabase($databaseConnection)-> getConnection(); return Doctrine_Manager::getInstance()-> getCurrentConnection(); }/*** Action of the command.* * @param type $arguments* @param type $options*/public function execute($arguments = array(), $options = array()) {// Request access to database$conn = $this-> getDefaultDatabaseConnection(); // Now here you are able to execute queries in the way you want, or access tables with Doctrine e.g// $item = Doctrine_Core::getTable('items')-> find(1); // $conn-> execute("TRUNCATE `table_name`"); }}

请注意, 你可以运行简单查询或使用理论模型。
【如何从Symfony 1.4中的任务(控制台命令)访问数据库(Doctrine连接)】编码愉快!

    推荐阅读