我在CakePHP google-group上问了这个问题,但没有找到任何解决方案,所以希望这里有更好的运气。
我一直在开发CakePHP,并决定拥有一个 MAMP上的localhost版本,以便我可以向人们演示我的应用程序 不依赖于互联网连接。
我们正在制作一些复杂的MySQL查询,并使用
$this->query('SELECT...');
我们已将它们放在函数中的相应模型中,以从控制器中删除所有这些逻辑。因此,从控制器我们将有类似
的东西$this->Users->getMeSomething($variable);
,转到user.php 模型并运行该功能。这对我们的live和dev工作得很好 网站,但出于某些原因,在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
感谢您的帮助
答案 0 :(得分:0)
如果强制蛋糕回显查询,并尝试在mySQL客户端中手动运行,会发生什么?看起来您的本地版本正在创建与主机上的版本不同的查询 - 因为mySQL抱怨语法。
答案 1 :(得分:0)
找到解决方案。它与MAMP无关,事实上我们最终在我们的开发服务器上发现了这个错误,但不是我们的实时服务器。
基本上,Cake核心在两台服务器上都有所不同 - 但是差不多(一个是RC,另一个是最终)。较旧的一个能够解释HABTM模型关系,但除非您明确指定它们,否则新的核心不会(因为我遵循所有命名约定,这必定是一个错误)。
所以这是它的工作原理: - 你有一个模型user.php和tag.php - 在user.php中,您将与Tag模型建立HABTM关系 - 在该数组中,添加字段:'with'=> 'UsersTag' - 为tag.php做同样的事情
这样,CakePHP不必弄清楚模型名称是什么(尽管它应该能够)