教义 SQL/表生成失败

Posted

技术标签:

【中文标题】教义 SQL/表生成失败【英文标题】:Doctrine SQL/table generation failing 【发布时间】:2010-09-19 17:54:08 【问题描述】:

我正在尝试让 Doctrine 从我之前使用 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();

但这也会返回:

NULL

我无法在手册、API 参考或 Doctrine 核心文件中找到解决方案。我希望这里有人知道。

提前致谢。

更新:不可能是因为this(旧?)错误,因为我没有以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'))) 

仍然是一个空数组。

【问题讨论】:

Whats the output of: print_r(Doctrine_Core::filterInvalidModels(Doctrine_Core::loadModels('models/generated')); 你也试过使用绝对路径吗? 感谢您的评论!输出为:Array ( ),因此模型似乎是有效的。绝对路径(/var/www/vhosts/ 等)给出与相对路径相同的结果。 实际上,如果它找到模型并适当地过滤它们,那么您在该数组中拥有所有有效模型作为路径或类名(我忘记了) - 这意味着在您的情况下 Doctrine_Core::loadModels 没有找到模型或它们都是无效的。你的引导程序是什么样的? 我已经更新了我的帖子,bootstrap.php 在底部。 尝试指定 Doctrine_Core::MODEL_LOADING_AGGRESSIVE 并看到它有所作为。 【参考方案1】:

问题是生成的模型名称是这样的:

<?php
abstract class BaseClass extends Doctrine_Record



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

【讨论】:

以上是关于教义 SQL/表生成失败的主要内容,如果未能解决你的问题,请参考以下文章

教义错误:“打开失败需要'/tmp/__CG__Source.php'”

Doctrine2 Merge() 因复合索引而失败教义2错误?

Symfony2 - 奏鸣曲 Datagrid 过滤器操作符转换为教义_orm_class 字段失败

SQL Server 触发器 - 一个失败一个没有

MySQL插入数据因外键约束失败?

从 SQL 失败中获取表