YAML スキーマを使用して以前に作成した一連のモデルから Doctrine に SQL を生成させようとしています。マニュアルにある以下のコードを使用すると、出力は一連のクエリになるはずです。
<?php
// test.php
require_once('bootstrap.php');
try
{
$models = Doctrine_Core::generateSqlFromModels('models/generated');
echo '<pre>';
var_dump($models);
echo '</pre>';
}
catch(Exception $e)
{
echo $e->getMessage();
}
ただし、このコードの結果は次のとおりです。
NULL
前に述べたように、SQLクエリを含む文字列を返す必要があります。
私も次のことを試しました:
<?php
// test.php
require_once('bootstrap.php');
try {
$result = Doctrine_Core::createTablesFromModels('models/generated');
echo '<pre>';
var_dump($result);
echo '</pre>';
}
catch(Exception $e)
{
echo $e->getMessage();
}
しかし、それも返します:
NULL
マニュアル、API リファレンス、または Doctrine コア ファイルで解決策を見つけることができませんでした。ここの誰かが知っていることを願っています。
前もって感謝します。
更新: A または B で始まるテーブル名がないため、この(古い?) バグが原因ではありません。
更新:私の bootstrap.php は次のようになります。
/**
* Bootstrap Doctrine.php, register autoloader specify
* configuration attributes and load models.
*/
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();
$conn = Doctrine_Manager::connection('pgsql://user:pass@localhost/dbname', 'doctrine');
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_EXPORT, Doctrine_Core::EXPORT_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
更新:行を変更しました:
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
に:
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_AGGRESSIVE);
しかし、の出力
print_r(Doctrine_Core::filterInvalidModels(Doctrine_Core::loadModels('models/generated')))
はまだ空の配列です。