Después de construir tu modelo y el código SQL para representarlo, Symfony ofrece un mecanismo para insertar el código SQL directamente en tu base de datos configurada. Si está ejecutando MySQL localmente, esto debería funcionar para usted sin ninguna configuración adicional. Si ejecuta MySQL en otro servidor, como es común en el alojamiento web compartido y otros entornos, obtendrá un error. En el pasado, solo he gruñido y enviado el código SQL a la base de datos manualmente, pero hay una solución fácil para hacer que las cosas funcionen como deberían.
Si tu instancia de MySQL no se está ejecutando localmente o no está configurada para usar un socket para la comunicación (o el archivo de socket no está en la ubicación predeterminada), recibirás un error como este cuando trates de hacer un 'symfony propel-insert- comando sql ':
La ejecución del destino "insert-sql" falló por el siguiente motivo: /mnt/pear/php/symfony/vendor/propel-generator/build-propel.xml:296:1: [empaquetado: conexión fallida [Native Error: Can ' t conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock' (2)] [Información del usuario: Array]]
Obtener un error como ese puede matar tu ritmo en un ciclo de reloj. El problema es que, a través de este error, aplicar manualmente el código SQL a la base de datos funcionará. Si tienes la configuración de conexión de la base de datos correcta en config / database.yml, Symfony se conectará correctamente a la base de datos para las operaciones normales de la aplicación. El problema es que Propel tiene su propia información de configuración de base de datos en config / propel.ini
Todo lo que necesita hacer para solucionar este problema es copiar la cadena de conexión de config /atabases.yml en config / propel.ini, reemplazando la configuración 'propel.database.url' que tiene un valor predeterminado de 'mysql: // localhost / projectname 'donde' projectname 'es el nombre de tu proyecto de Symfony.
La línea 'dsn' en el archivo database.yml contiene la cadena de conexión, algo así como:
dsn: mysql: // nombre de usuario: [correo electrónico protegido] / dbname
Deje la parte 'dsn:' allí y copie el 'mysql: // ...'. y el resto de la línea y reemplace la cadena de conexión en la línea config / propel.ini que comienza con 'propel.database.url' con su cadena de conexión, como:
propel.database.url = mysql: // nombre de usuario: [correo electrónico protegido] / dbname
Si la cadena de conexión es correcta (y tu archivo schema.yml está en orden) ahora deberías poder hacer un 'Symfony propel-insert-sql' sin error.