Như @erfan saif, magento có hỗ trợ đa rdbms kể từ 1.6. Nhưng trong thế giới thực, tôi chỉ biết phụ trợ mysql.
Điều quan trọng là phải hiểu, magento có thể có các tập lệnh cài đặt / nâng cấp / dữ liệu khác nhau cho các phụ trợ khác nhau. Nếu bạn muốn một Loại chỉ mục đặc biệt được hỗ trợ bởi mysql nhưng không phải bằng SQL tiêu chuẩn, bạn có thể triển khai tập lệnh mysql4-install-1.0.0.php. Nếu tập lệnh của bạn là chung chung, hãy sử dụng install-1.0.0.php
Nếu bạn xem Mage_Core_Model_Resource_Setup, tôi có thể tìm thấy hai thứ xen kẽ:
- Bạn có thể đặt tên cho tệp của mình (% s -)% s-VERSION. (Php | sql)
- Nếu bạn có hai tập lệnh cài đặt (nhưng với tập lệnh dữ liệu, thì nó sẽ giống nhau (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento thích tập lệnh chuyên biệt hơn tập lệnh chung (như một mong chờ)
ứng dụng / mã / lõi / Pháp sư / Lõi / Mô hình / Tài nguyên / Cài đặt.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;
}
Hãy cẩn thận, nếu bạn đặt tên cho tập lệnh của mình, .sql
nó được gọi trực tiếp vào cơ sở dữ liệu:
// 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);
Ngoài ra, tôi có thể làm gì khi tập lệnh thiết lập của tôi không chạy để tìm hiểu tại sao nó không hoạt động?
Tôi thích die ('sadf') khi bắt đầu tập tin cài đặt / nâng cấp của mình, vì tôi có thể chạy nó nhiều lần nếu nó được gọi, vì vậy tôi có thể kiểm tra, tất cả các biến tôi đặt đều đúng, trước khi mọi thứ được thay đổi kho dữ liệu. Nếu tôi thấy 'sadf' trên màn hình, tôi biết, kịch bản đang chạy.
Tôi tải magento (thay vì sadf), đã đến lúc gỡ lỗi, hai lỗi tiêu chuẩn của tôi là:
- Tôi đã tha thứ để thêm tập lệnh vào cấu hình
- Tôi có thư mục
sql/
bị lãng quên, ví dụ sql/install-1.0.0.php
thay vìsql/my_module_setup/install-1.0.0.php
Và bởi vì tôi nghĩ rằng nó phù hợp ở đây, hãy cẩn thận với tên biến của bạn: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
CẬP NHẬT
@ rouven-rieker đã thêm thông qua twitter rằng dữ liệu- và thiếu mysql4- đã được thêm vào trong magento 1.6. Nếu bạn cần tương thích ngược hãy cẩn thận!