Как и @erfan saif, magento получил поддержку multi-rdbms с 1.6. Но в реальном мире я знаю только бэкенды mysql.
Важно понимать, что magento может иметь разные сценарии установки / обновления / данных для разных бэкэндов. Если вам нужен специальный Index-Type, который поддерживается mysql, но не стандартным SQL, вы можете реализовать скрипт mysql4-install-1.0.0.php. Если ваш скрипт является общим, используйте install-1.0.0.php
Если вы загляните в Mage_Core_Model_Resource_Setup, я найду две интересные вещи:
- Вы можете назвать ваши файлы (% s -)% s-VERSION. (Php | sql)
- Если у вас есть два сценария установки (но со сценариями данных, это одно и то же (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento предпочитает специализированный сценарий, а не общий сценарий (как один ожидал)
Приложение / код / ядро / Mage / Ядро / Модель / 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;
}
Будьте осторожны, если вы назовете свой скрипт, .sql
он вызывается непосредственно в базу данных:
// 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);
Кроме того, что я могу сделать, когда мой скрипт установки не запущен, чтобы выяснить, почему это не так?
Я предпочитаю die ('sadf') в начале моего файла установки / обновления, потому что я могу запустить его несколько раз, если он вызывается, так что я могу проверить, все ли переменные, которые я установил, верны, прежде чем что-либо изменить в база данных. Если я вижу «sadf» на экране, я знаю, что скрипт запущен.
Я magento загружает (вместо sadf), пришло время для отладки, две мои стандартные ошибки:
- Я забыл добавить скрипт в конфиг
- У меня есть каталог в
sql/
забытом, например, sql/install-1.0.0.php
вместоsql/my_module_setup/install-1.0.0.php
И потому что я думаю, что это подходит здесь, будьте осторожны с именами ваших переменных: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
UPDATE
@ rouven-rieker добавил через твиттер, что данные и отсутствующий mysql4 были добавлены в magento 1.6. Если вам нужна обратная совместимость, будьте осторожны!