教义 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错误?