MAMPとCakePHPがモデルの問題を呼び出す
質問
CakePHPのgoogle-groupでこの質問をしましたが、解決策が見つからなかったので、うまくいけばここで幸運を得ることができます。
私は少しの間CakePHPで開発してきましたが、 MAMPのlocalhostバージョン。これにより、アプリを人にデモすることができます。 インターネット接続に依存することなく。
複雑なMySQLクエリがいくつか作成され、使用されています
$this->query('SELECT...');
これらのすべてのロジックをコントローラーから削除するために、関数内の適切なモデルにこれらを配置しました。したがって、コントローラーから次のようなものが得られます
$this->Users->getMeSomething($variable);
、それはuser.phpに行きます その関数をモデル化して実行します。これは、ライブおよび開発者で正常に機能します サイトですが、MAMPの何らかの理由で、このタイプの呼び出しが行われるたびにエラーが発生します。呼び出しの例の1つです。
エラー:
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です
ご協力ありがとうございます
解決 2
解決策を見つけました。 MAMPとは何の関係もありません。実際、このバグは最終的に開発サーバーで見つかりましたが、ライブサーバーでは見つかりませんでした。
基本的に、Cakeコアは両方のサーバーで異なっていましたが、わずかに違いがありました(一方はRCで、もう一方は最終でした)。古いものはHABTMモデルの関係を解釈できましたが、新しいコアは明示的に指定しない限りそうではありません(これはすべての命名規則に従っているため、バグに違いありません)。
したがって、次のように機能します。 -モデルuser.phpとtag.phpがあります -user.phpでは、タグモデルとHABTMの関係があります。 -その配列に、フィールドを追加します: 'with' => 「UsersTag」 -tag.phpについても同じことを行います
この方法により、CakePHPはモデル名が何であるかを把握する必要がありません(ただし、できるはずです)
他のヒント
ケーキに強制的にクエリをエコーさせ、mySQLクライアントで手動で実行しようとするとどうなりますか?ローカルバージョンがホスト上のバージョンとは異なるクエリを作成しているように見えます-mySQLは構文に不満を持っているためです。