个性化阅读
专注于IT技术分析

如何从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-Databases

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn:      mysql:host=localhost;dbname=my_database
      username: root
      password: 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 = <<<EOF
Description 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`");
    }
}

请注意, 你可以运行简单查询或使用理论模型。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何从Symfony 1.4中的任务(控制台命令)访问数据库(Doctrine连接)

评论 抢沙发

评论前必须登录!