Jako @erfan saif, magento ma obsługę wielu rdbms od wersji 1.6. Ale w prawdziwym świecie znam tylko backendy mysql.
Ważne jest, aby zrozumieć, że magento może mieć różne skrypty instalacji / aktualizacji / danych dla różnych backendów. Jeśli chcesz specjalnego typu indeksu obsługiwanego przez mysql, ale nie przez standardowy SQL, możesz zaimplementować skrypt mysql4-install-1.0.0.php. Jeśli twój skrypt jest ogólny, użyj install-1.0.0.php
Jeśli przyjrzysz się Mage_Core_Model_Resource_Setup, mogę znaleźć dwie interesujące rzeczy:
- Możesz nazwać swoje pliki (% s -)% s-VERSION. (Php | sql)
- Jeśli masz dwa skrypty instalacyjne (ale ze skryptami danych, jest to to samo (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento woli skrypt specjalistyczny niż skrypt ogólny (jako jeden oczekiwałby)
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;
}
Uważaj, jeśli nazwiesz skrypt .sql
, jest on wywoływany bezpośrednio w bazie danych:
// 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);
Co też mogę zrobić, gdy mój skrypt instalacyjny nie działa, aby dowiedzieć się, dlaczego tak nie jest?
Wolę matrycę („sadf”) na początku mojego pliku instalacyjnego / aktualizacyjnego, ponieważ mogę ją uruchomić wiele razy, jeśli zostanie wywołana, dzięki czemu mogę sprawdzić, czy wszystkie ustawione przeze mnie zmienne są poprawne, zanim cokolwiek zostanie zmienione w baza danych. Jeśli widzę „sadf” na ekranie, wiem, skrypt jest uruchomiony.
I ładuje magento (zamiast sadf), czas debugować, moje dwa standardowe błędy to:
- Zapomniałem dodać skrypt do konfiguracji
- Mam
sql/
zapomniany katalog , np. sql/install-1.0.0.php
Zamiastsql/my_module_setup/install-1.0.0.php
A ponieważ myślę, że tu pasuje, uważaj na nazwy zmiennych: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
AKTUALIZACJA
@ rouven-rieker dodana przez Twittera, że dane - i brakujący mysql4 - zostały dodane w Magento 1.6. Jeśli potrzebujesz kompatybilności wstecznej, bądź ostrożny!