1

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'))) 

はまだ空の配列です。

4

1 に答える 1

0

問題は、生成されたモデル名が次のようなものだったことです。

<?php
abstract class BaseClass extends Doctrine_Record
{

}

abstract キーワードを削除するとうまくいきました。他のすべてのDoctrineモデルはabstractキーワードを使用していないため、削除しても害はありません。

于 2010-09-20T17:07:08.137 に答える