@erfan saifとして、magentoは1.6からmulti-rdbmsをサポートしました。しかし、現実の世界では、mysqlバックエンドのみを知っています。
magentoは異なるバックエンドに対して異なるインストール/アップグレード/データスクリプトを持つことができることを理解することが重要です。標準SQLではなくmysqlでサポートされる特別なIndex-Typeが必要な場合は、mysql4-install-1.0.0.phpスクリプトを実装できます。スクリプトが汎用の場合、install-1.0.0.phpを使用します
Mage_Core_Model_Resource_Setupを見ると、2つの興味深いことがわかります。
- ファイルに名前を付けることができます(%s-)%s-VERSION。(php | sql)
- 2つのインストールスクリプトがある場合(ただし、データスクリプトを使用する場合は同じです(app / code / core / Mage / Core / Model / Resource / Setup.php:520))magentoは、汎用スクリプトよりも特殊なスクリプトを優先します(1つとして)期待します)
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')が好きです、なぜならそれが呼び出されれば複数回実行できるので、設定が変更される前にすべての設定変数が正しいかどうかを確認できるからですデータベース。画面に「sadf」が表示されている場合は、スクリプトが実行されています。
(sadfの代わりに)ロードします。デバッグの時間です。2つの標準エラーは次のとおりです。
- スクリプトを設定に追加するのを忘れました
- 私は、ディレクトリを持って
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
更新
@ rouven-riekerがtwitterを介して追加され、data- and missing mysql4-がmagento 1.6で追加されました。後方互換性が必要な場合は注意してください!