Als @erfan saif hat Magento seit 1.6 Multi-Rdbms-Unterstützung. Aber in der realen Welt kenne ich nur MySQL-Backends.
Es ist wichtig zu verstehen, dass Magento verschiedene Installations- / Upgrade- / Datenskripte für verschiedene Backends haben kann. Wenn Sie einen speziellen Indextyp wünschen, der von MySQL, aber nicht von Standard-SQL unterstützt wird, können Sie ein Skript für MySQL4-Install-1.0.0.php implementieren. Wenn Ihr Skript generisch ist, verwenden Sie install-1.0.0.php
Wenn Sie sich Mage_Core_Model_Resource_Setup ansehen, finde ich zwei interessante Dinge:
- Sie können Ihre Dateien benennen (% s -)% s-VERSION. (Php | sql)
- Wenn Sie über zwei Installationsskripte verfügen (jedoch mit Datenskripten, die identisch sind (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)), zieht magento das spezielle Skript dem generischen Skript (als ein Skript) vor würde erwarten)
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;
}
Seien Sie vorsichtig, wenn Sie Ihr Skript benennen, wird .sql
es direkt in der Datenbank aufgerufen:
// 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);
Was kann ich auch tun, wenn mein Setup-Skript nicht ausgeführt wird, um herauszufinden, warum dies nicht der Fall ist?
Ich bevorzuge einen Würfel ('sadf') am Anfang meiner Installations- / Aktualisierungsdatei, da ich ihn bei einem Aufruf mehrmals ausführen kann, um zu überprüfen, ob alle von mir festgelegten Variablen korrekt sind, bevor etwas geändert wird die Datenbank. Wenn ich das "sadf" auf dem Bildschirm sehe, läuft das Skript.
Wenn ich magento lade (anstelle des sadf), ist es Zeit zu debuggen, meine zwei Standardfehler sind:
- Ich habe vergessen, das Skript zur Konfiguration hinzuzufügen
- Ich habe das Telefonbuch
sql/
vergessen, zB sql/install-1.0.0.php
stattsql/my_module_setup/install-1.0.0.php
Und weil ich denke, dass es hier passt, seien Sie vorsichtig mit Ihren Variablennamen: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
UPDATE
@ rouven-rieker fügte via Twitter hinzu, dass Daten- und fehlendes mysql4- in Magento 1.6 hinzugefügt wurden. Wenn Sie Abwärtskompatibilität benötigen, seien Sie vorsichtig!