Como @erfan saif, o magento tem suporte a multi-rdbms desde a versão 1.6. Mas no mundo real, eu sei apenas back-end mysql.
É importante entender que o magento pode ter diferentes scripts de instalação / atualização / dados para diferentes back-end. Se você deseja um tipo de índice especial suportado pelo mysql, mas não pelo SQL padrão, você pode implementar um script mysql4-install-1.0.0.php. Se o seu script for genérico, use install-1.0.0.php
Se você der uma olhada no Mage_Core_Model_Resource_Setup, posso encontrar duas coisas interessantes:
- Você pode nomear seus arquivos (% s -)% s-VERSION. (Php | sql)
- Se você possui dois scripts de instalação (mas com scripts de dados, é o mesmo (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)), o magento prefere o script especializado ao invés do script genérico (como um esperaria)
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;
}
Cuidado, se você nomear seu script .sql
ele será chamado diretamente no banco de dados:
// 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);
Além disso, o que posso fazer quando meu script de instalação não está em execução para descobrir por que não está?
Eu prefiro um dado ('sadf') no início do meu arquivo de instalação / atualização, porque posso executá-lo várias vezes se for chamado, para que eu possa verificar se todas as variáveis que defini estão corretas antes que qualquer coisa seja alterada. o banco de dados. Se eu vir o 'sadf' na tela, eu sei, o script está sendo executado.
Eu carrego magento (em vez do sadf), é hora de depurar, meus dois erros padrão são:
- Esqueci de adicionar o script à configuração
sql/
Esqueci o diretório , por exemplo, em sql/install-1.0.0.php
vez desql/my_module_setup/install-1.0.0.php
E como acho que se encaixa aqui, tenha cuidado com os nomes das variáveis: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
UPDATE
@ rouven-rieker adicionou via twitter que dados e mysql4 ausentes foram adicionados no magento 1.6. Se você precisar de compatibilidade com versões anteriores, tenha cuidado!