代码之家  ›  专栏  ›  技术社区  ›  Evert

SQL/表生成失败

  •  1
  • Evert  · 技术社区  · 14 年前

    我正在尝试从我先前用YAML模式创建的一组模型中生成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();
    }
    

    但这也带来了:

    无效的
    

    提前谢谢。

    更新: 不可能是因为 this (老?)bug,因为我没有以A或B开头的表名。

    更新: 我的引导.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'))) 
    

    仍然是空数组。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Evert    14 年前

    问题是生成的模型名如下所示:

    <?php
    abstract class BaseClass extends Doctrine_Record
    {
    
    }
    

    删除abstract关键字成功了。所有其他条令模型都没有使用abstract关键字,因此删除它不会造成任何伤害。