En tant que @erfan saif, magento a pris en charge plusieurs rdbms depuis 1.6. Mais dans le monde réel, je ne connais que les backends mysql.
Il est important de comprendre que magento peut avoir différents scripts d'installation / mise à niveau / données pour différents backends. Si vous voulez un type d'index spécial qui est supporté par mysql mais pas par standard-SQL, vous pouvez implémenter un script mysql4-install-1.0.0.php. Si votre script est générique, utilisez install-1.0.0.php
Si vous jetez un œil à Mage_Core_Model_Resource_Setup, je peux trouver deux choses intéressantes:
- Vous pouvez nommer vos fichiers (% s -)% s-VERSION. (Php | sql)
- Si vous avez deux scripts d'installation (mais avec des scripts de données, c'est la même chose (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento préfère le script spécialisé au script générique (comme un seul attendrait)
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;
}
Attention, si vous nommez votre script, .sql
il est appelé directement dans la base de données:
// 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);
De plus, que puis-je faire lorsque mon script d'installation n'est pas en cours d'exécution pour savoir pourquoi il ne l'est pas?
Je préfère un dé ('sadf') au début de mon fichier d'installation / mise à niveau, car je peux l'exécuter plusieurs fois s'il est appelé, donc je peux vérifier si toutes les variables que j'ai définies sont correctes, avant que quoi que ce soit ne soit changé dans la base de données. Si je vois le «sadf» à l'écran, je sais que le script est en cours d'exécution.
Je charge magento (au lieu du sadf), il est temps de déboguer, mes deux erreurs standard sont:
- J'ai oublié d'ajouter le script à la config
- J'ai le répertoire
sql/
oublié, par exemple sql/install-1.0.0.php
au lieu desql/my_module_setup/install-1.0.0.php
Et parce que je pense que cela convient ici, soyez prudent avec vos noms de variables: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
UPDATE
@ rouven-rieker a ajouté via twitter que les données et mysql4 manquants ont été ajoutés dans magento 1.6. Si vous avez besoin d'une compatibilité descendante, faites attention!