Як @erfan saif, magento отримав підтримку multi-rdbms з 1.6. Але в реальному світі я знаю лише mysql backends.
Важливо розуміти, що 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)
- Якщо у вас є два сценарії встановлення (але з сценаріями даних, це однаково (додаток / код / core / Mage / Core / Model / Resource / Setup.php: 520)) magento віддає перевагу спеціалізованому сценарію над загальним сценарієм (як один сподівався б)
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;
}
Будьте уважні, якщо ви називаєте свій скрипт, .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') на початку мого файлу встановлення / оновлення, тому що я можу запустити його кілька разів, якщо він викликається, щоб я міг перевірити, чи всі перераховані мені змінні є правильними, перш ніж щось змінити в база даних. Якщо я бачу на екрані "садф", я знаю, сценарій працює.
Я завантажую 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 додав через twitter, що дані та відсутність mysql4- додані в magento 1.6. Якщо вам потрібна зворотна сумісність, будьте обережні!