質問

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は構文に不満を持っているためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top