Aprende a establecer una conexión de base de datos con Symfony 1.4 dentro de una tarea (comando de consola).

Hay muchas formas de utilizar los comandos de Symfony. Una de las cosas útiles que puede hacer es automatizar las tareas relacionadas con la base de datos de su proyecto o incluso crear métodos de ayuda para borrar tablas, etc. en el modo de desarrollo. Si está trabajando con Symfony 1.4, le explicaremos rápidamente cómo acceder fácilmente a la base de datos dentro de una tarea o comando de consola de Symfony.

Recuperar una conexión a la base de datos 

Como sabrá, puede definir varias conexiones de base de datos en el ./proyect/config/databases.ymlarchivo. En este archivo, puede definir una conexión de la siguiente manera:

# 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

Como puede ver, en este ejemplo tenemos una conexión simple llamada doctrina con la configuración dada. Entonces, en nuestro código para recuperar la conexión, usaremos la conexión doctrine nombrada . Sin embargo, es de su interés un método auxiliar muy simple que puede agregar a su Clase de tarea para recuperar la conexión predeterminada:

<?php

/**
 * Este método crea una conexión a la base de datos predeterminada de tu aplicación con Doctrine.
 * 
 * @return type
 */
private function getDefaultDatabaseConnection()
{
    $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true));
    
    // Establezca alguna conexión en el archivo database.yml
    $databaseConnection = "doctrine";
    
    $databaseManager->getDatabase($databaseConnection)->getConnection();  
    
    return Doctrine_Manager::getInstance()->getCurrentConnection();
}

El metodo getDefaultDatabaseConnection devolverá la conexión de doctrina definida en su archivo databases.yml, sin embargo, puede cambiar el nombre si es otro.

Ejemplo de tarea

La siguiente tarea de prueba muestra un ejemplo básico de la ejecución del php symfony test-command:demodefinido por la siguiente clase, donde podrá utilizar la conexión a la base de datos en la función execute:

<?php

// ./proyect/lib/task/TestCommandTask.class.php

/**
 * Ejemplo de Symfony 1.4 para acceder a la base de datos dentro de un comando de consola (tarea).
 * 
 * @author Carlos Delgado <[email protected]>
 */
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;
    }
    
    /**
     * Este método crea una conexión a la base de datos predeterminada de tu aplicación con Doctrine.
     * 
     * @return type
     */
    private function getDefaultDatabaseConnection()
    {
        $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true));
        
        // Obtenga alguna conexión definida en el archivo base de datos.yml
        $databaseConnection = "doctrine";
        
        $databaseManager->getDatabase($databaseConnection)->getConnection();  
        
        return Doctrine_Manager::getInstance()->getCurrentConnection();
    }
    
    /**
     * Acción del comando.
     * 
     * @param type $arguments
     * @param type $options
     */
    public function execute($arguments = array(), $options = array()) {
        
        // Solicitar acceso a la base de datos
        $conn = $this->getDefaultDatabaseConnection();
        
        // Ahora aquí puede ejecutar consultas de la forma que desee o acceder a tablas con Doctrine, por ejemplo
        // $item = Doctrine_Core::getTable('items')->find(1);
        // $conn->execute("TRUNCATE `table_name`");
    }
}

Tenga en cuenta que puede ejecutar consultas simples o utilizar también el modelo de doctrine.

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores