推进 sql:insert 抛出错误“无法解析 sqldb.map 的内容”
Posted
技术标签:
【中文标题】推进 sql:insert 抛出错误“无法解析 sqldb.map 的内容”【英文标题】:propel sql:insert throws error 'Unable to parse contents of sqldb.map' 【发布时间】:2014-08-10 18:14:58 【问题描述】:这些天我正在尝试使用 Propel 构建一个项目。我在propelorm.org/documentation/02-buildtime.html 上完成了基本的“书店”教程,但是当我尝试最终通过 propel 插入生成的 sql 代码以填充数据库时,抛出以下错误:
[异常] 无法解析“/sqldb.map”的内容。
很遗憾,我不知道出了什么问题。我尽可能准确地按照教程进行操作。
关于我的安装和到目前为止我所做的事情的信息:
1) 本地主机安装 (Mac OS 10.8.5) 与 php 5.4.27(DOM 模块、PDO 和 SPL 启用)和 mysql 5.6.19。
2) 成功解析 Composer.json:
"require":
"propel/propel": "~2.0@dev"
,
"autoload":
"classmap": ["bookstoreDb/generated-classes/"]
3) 使用外键创建了一个 schema.xml,与教程 (propelorm.org/documentation/02-buildtime.html) 中的完全一样。
4) 在子文件夹 'conf' 中创建了一个配置文件 propel.yaml,就像在教程中一样。
5) 使用推进脚本生成必要的 sql (propel sql:build
)、模型 (propel model:build
) 和配置文件 (propel config:convert
)。这些命令的结果如教程中所示。
6)通过终端成功创建数据库“书店”。
7) 尝试通过propel sql:insert
插入sql 代码。现在抛出上述错误:
[异常] 无法解析“/sqldb.map”的内容。
这里是项目的index.php:
// setup the autoloading
require_once 'vendor/autoload.php';
// setup Propel
require_once 'bookstoreDb/generated-conf/config.php';
// Here I get the parse error: parse error in ../bookstore/bookstoreDb/generated-classes/Base/Author.php on line 138
$author = new Author();
$author->setFirstName('Jane');
$author->setLastName('Austen');
$author->save();
这里是 config.php:
$serviceContainer = \Propel\Runtime\Propel::getServiceContainer();
$serviceContainer->checkVersion('2.0.0-dev');
$serviceContainer->setAdapterClass('bookstore', 'mysql');
$manager = new \Propel\Runtime\Connection\ConnectionManagerSingle();
$manager->setConfiguration(array (
'classname' => 'Propel\\Runtime\\Connection\\ConnectionWrapper',
'dsn' => 'mysql:host=localhost;dbname=bookstore',
'user' => 'root',
'password' => 'password',
'attributes' =>
array (
'ATTR_EMULATE_PREPARES' => false,
),
));
$manager->setName('bookstore');
$serviceContainer->setConnectionManager('bookstore', $manager);
$serviceContainer->setDefaultDatasource('bookstore');
问题可能出在哪里?还有其他方法可以设置基本项目吗?我会很感激每一个帮助!谢谢!
【问题讨论】:
【参考方案1】:我为此提交了一个问题:https://github.com/propelorm/Propel2/issues/694
SqlBuildCommand uses configured sql-dir
$manager->setWorkingDirectory($generatorConfig->getSection('paths')['sqlDir'])
SqlInsertCommand only uses the command line option
$manager->setWorkingDirectory($input->getOption('sql-dir'));
使用正确的 sql 目录添加 --sql-dir
选项以推动 sql:insert
确实有效
修复已提交https://github.com/propelorm/Propel2/pull/695,但尚未合并
【讨论】:
能否请您澄清一下--sql-dir 和--config-dir 分别应该进入哪些目录?新手在这里,所以我不确定。谢谢。以上是关于推进 sql:insert 抛出错误“无法解析 sqldb.map 的内容”的主要内容,如果未能解决你的问题,请参考以下文章
语法错误:来自 Python + Scrapy 的 SQL INSERT?