0

我在 CakePHP google-group 上问了这个问题,但没有找到任何解决方案,所以希望在这里能有更好的运气。

我已经在 CakePHP 上开发了一段时间,并决定在 MAMP 上有一个本地主机版本,这样我就可以在不依赖 Internet 连接的情况下向人们演示我的应用程序。

我们有几个复杂的 MySQL 查询,并使用

$this->query('SELECT...');

我们已将它们放置在函数中的适当模型中,以从控制器中删除所有这些逻辑。因此,从控制器我们将有类似的东西

$this->Users->getMeSomething($variable);

,进入 user.php 模型并运行该函数。这在我们的实时和开发站点上运行良好,但由于某种原因,在 MAMP 上,每当进行这种类型的调用时,我都会遇到错误,作为其中一个调用的示例:

错误:

Warning (512): SQL Error: 1064: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the
right syntax to use near '__getUsersForUsers' at line 1 [CORE/cake/
libs/model/datasources/dbo_source.php, line 525]

语境:

DboSource::showQuery() - CORE/cake/libs/model/datasources/
dbo_source.php, line 525
DboSource::execute() - CORE/cake/libs/model/datasources/
dbo_source.php, line 201
DboSource::fetchAll() - CORE/cake/libs/model/datasources/
dbo_source.php, line 336
DboSource::query() - CORE/cake/libs/model/datasources/dbo_source.php,
line 297
Model::call__() - CORE/cake/libs/model/model.php, line 441
Overloadable::__call() - CORE/cake/libs/overloadable_php5.php, line 52
AppModel::__getUsersForUsers() - [internal], line ??
UsersController::view() - APP/controllers/users_controller.php, line
401
Object::dispatchMethod() - CORE/cake/libs/object.php, line 118
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 227
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 194
[main] - APP/webroot/index.php, line 88

webroot 上的第 88 行是这样的: $Dispatcher->dispatch($url);

我已经尝试过 CakePHP 的 1.2 和 1.2.5。MAMP 上的 MySQL 是 5.1.31,在我的主机 MediaTemple 上是 5.1.26-rc

谢谢你的帮助

4

2 回答 2

0

如果您强制 cake 回显查询,并尝试在 mySQL 客户端中手动运行它,会发生什么情况?看起来您的本地版本正在创建与您主机上的版本不同的查询——因为 mySQL 正在抱怨语法。

于 2009-10-21T21:15:57.503 回答
0

找到了解决方案。它与 MAMP 无关,事实上我们最终在我们的开发服务器上发现了这个错误,但不是我们的实时服务器。

基本上,两台服务器上的 Cake 核心是不同的——但差别很小(一个是 RC,另一个是最终版本)。较旧的内核能够解释 HABTM 模型关系,但较新的内核不能,除非您明确指定它们(这一定是一个错误,因为我遵循了所有命名约定)。

下面是它的工作原理: - 你有一个模型 user.php 和 tag.php - 在 user.php 中,你将与 Tag 模型有一个 HABTM 关系 - 在该数组中,添加字段:'with' => ' UsersTag' - 对 tag.php 执行相同操作

这样,CakePHP 就不必弄清楚模型名称是什么(尽管它应该能够)

于 2009-10-26T17:35:04.760 回答