Come @erfan saif, magento ha ottenuto il supporto multi-rdbms dall'1.6. Ma nel mondo reale, conosco solo backend mysql.
È importante capire che Magento può avere diversi script di installazione / aggiornamento / dati per diversi backend. Se si desidera un tipo di indice speciale supportato da mysql ma non da SQL standard, è possibile implementare uno script mysql4-install-1.0.0.php. Se lo script è generico, utilizzare install-1.0.0.php
Se dai un'occhiata a Mage_Core_Model_Resource_Setup posso trovare due cose interessanti:
- Puoi nominare i tuoi file (% s -)% s-VERSION. (Php | sql)
- Se hai due script di installazione (ma con script di dati, è lo stesso (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento preferisce lo script specializzato rispetto allo script generico (come uno si aspetterebbe)
app / code / core / Mage / core / Modello / 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;
}
Fai attenzione, se assegni un nome al tuo script, .sql
questo viene invocato direttamente nel database:
// 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);
Inoltre, cosa posso fare quando il mio script di installazione non è in esecuzione per scoprire perché non lo è?
Preferisco un die ('sadf') all'inizio del mio file di installazione / aggiornamento, perché posso eseguirlo più volte se viene chiamato, quindi posso controllare, se tutte le variabili che ho impostato sono corrette, prima che qualcosa sia cambiato il database. Se vedo 'sadf' sullo schermo, lo so, lo script è in esecuzione.
I magento carica (invece di sadf), è ora di eseguire il debug, i miei due errori standard sono:
- Ho dimenticato di aggiungere lo script alla configurazione
- Ho
sql/
dimenticato la directory , ad es. sql/install-1.0.0.php
Invece disql/my_module_setup/install-1.0.0.php
E poiché penso che si adatti qui, fai attenzione ai nomi delle tue variabili: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
UPDATE
@ rouven-rieker ha aggiunto via twitter che i dati - e mancando mysql4 - sono stati aggiunti in magento 1.6. Se hai bisogno di compatibilità con le versioni precedenti, fai attenzione!