Como @erfan saif, magento obtuvo soporte multi-rdbms desde 1.6. Pero en el mundo real, solo conozco backends mysql.
Es importante comprender que Magento puede tener diferentes scripts de instalación / actualización / datos para diferentes backends. Si desea un tipo de índice especial que sea compatible con mysql pero no con SQL estándar, puede implementar un script mysql4-install-1.0.0.php. Si su script es genérico, use install-1.0.0.php
Si echas un vistazo a Mage_Core_Model_Resource_Setup, puedo encontrar dos cosas interesantes:
- Puede nombrar sus archivos (% s -)% s-VERSION. (Php | sql)
- Si tiene dos scripts de instalación (pero con scripts de datos, es el mismo (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento prefiere el script especializado sobre el script genérico (como uno Esperaría)
app / code / core / Mage / Core / Model / Resource / Setup.php: 488
$regExpDb = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);
while (false !== ($file = $handlerDir->read())) {
$matches = array();
if (preg_match($regExpDb, $file, $matches)) {
$dbFiles[$matches[1]] = $filesDir . DS . $file;
} else if (preg_match($regExpType, $file, $matches)) {
$typeFiles[$matches[1]] = $filesDir . DS . $file;
}
}
[...]
foreach ($typeFiles as $version => $file) {
$dbFiles[$version] = $file;
}
Tenga cuidado, si nombra su script .sql
, se invoca directamente en la base de datos:
// app/code/core/Mage/Core/Model/Resource/Setup.php:621
switch ($fileType) {
case 'php':
$conn = $this->getConnection();
$result = include $fileName;
break;
case 'sql':
$sql = file_get_contents($fileName);
if (!empty($sql)) {
$result = $this->run($sql);
Además, ¿qué puedo hacer cuando mi script de configuración no se está ejecutando para descubrir por qué no?
Prefiero un dado ('sadf') al comienzo de mi archivo de instalación / actualización, porque puedo ejecutarlo varias veces si se llama, por lo que puedo verificar, si todas las variables que configuro son correctas, antes de que algo cambie la base de datos. Si veo el 'sadf' en la pantalla, lo sé, el script se está ejecutando.
Realizo cargas (en lugar de sadf), es hora de depurar, mis dos errores estándar son:
- He olvidado agregar el script a la configuración
- Tengo el directorio en
sql/
olvidado, por ejemplo, en sql/install-1.0.0.php
lugar desql/my_module_setup/install-1.0.0.php
Y como creo que encaja aquí, tenga cuidado con los nombres de sus variables: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
ACTUALIZACIÓN
@ rouven-rieker agregó a través de Twitter que los datos, y mysql4 faltante, se agregaron en magento 1.6. Si necesita compatibilidad con versiones anteriores, ¡tenga cuidado!