es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecutando semillas de Phinx desde archivo de migración

Estoy escribiendo un conjunto de migraciones de Phinx que instalan una base de datos de aplicación e insertan los seeds. Mis primeros 4 archivos de migración construyen el esquema de la base de datos (con restricciones de clave externa), disparadores, funciones y procedimientos almacenados respectivamente. Me gustaría usar un quinto archivo de migración para ejecutar todos los seeds para que cada archivo de migración posterior tenga datos de seed para trabajar.

Me gustaría un ejemplo de ejecutar todos los seeds de la aplicación DESDE EL INTERIOR del método up de un archivo de migración de Phinx.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Ejemplo de Ejecución de Seeds desde un Archivo de Migración de Phinx

    El siguiente ejemplo muestra cómo ejecutar todas las semillas de la aplicación desde el método up de un archivo de migración de Phinx:

    public function up()
    {
        // Construir el esquema de la base de datos
        // ...
    
        // Insertar datos de semilla
        $seedData = [
            'users' => [
                ['name' => 'John Doe', 'email' => 'john@example.com'],
                ['name' => 'Jane Doe', 'email' => 'jane@example.com'],
            ],
            'posts' => [
                ['title' => 'Hola Mundo', 'body' => '¡Este es mi primer post!'],
                ['title' => 'Foo Bar', 'body' => '¡Este es mi segundo post!'],
            ],
        ];
    
        foreach ($seedData as $tableName => $rows) {
            foreach ($rows as $row) {
                $this->execute("INSERT INTO {$tableName} SET " . $this->getSetStatement($row));
            }
        }
    }
    
    private function getSetStatement($data)
    {
        $parts = [];
        foreach ($data as $column => $value) {
            $parts[] = "{$column} = '{$value}'";
        }
        return implode(', ', $parts);
    }
    

Comments are closed.