- ベストアンサー
モデルのメソッド名がSQLと解釈される現象への対処法と動作位置について
- CakePHPで開発をしている中で、モデルに定義したメソッド名がSQLと解釈されてしまうという現象に困っています。この現象への対処法について教えていただきたいです。
- ログに吐き出されたSQLを見ると、メソッド名がSQL文と解釈されていることがわかります。一方、同じコントローラー内でモデルの他のメソッドを呼び出す際には正常に動作しています。
- モデルのメソッドを実行するときに動くCakePHPのコードの位置についても教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、EnquetesControllerで、正しく呼んでるのでしょうか。 場合によって、Enqueteクラスの継承元のModelクラスがロードされている場合があります。 class EnquetesController extends AppController{ function index(){ echo get_class($this->Enquete); } } としてクラス名が、「Enquete」と表示されるか確認して下さい。 もし、それが「Model」と表示するようであれば、EnquetesControllerで、明示的に、 var $uses = array('Enquete'); を記述してみてください。
その他の回答 (1)
- manimani2
- ベストアンサー率70% (12/17)
こんにちは(^^) 参考にならないかもしれまんが、通りすがったので回答します。 saveメソッドが正常に動作しているということなので、何かのちょっとしたミスではないかと思うのです。とりあえず、問題のメソッド以外に、何か単純なメソッドを1つ作って、それをコントローラーから動かしてみるのはどうでしょうか? 例えばレコード数を表示するようなメソッドを作って・・・ function getRecodeCount(){ $count = $this->find('count'); return $count; } とモデルに書き、コントローラーから・・・ $this->Enquete->getRecodeCount(); で呼び出してみるとか。もし呼び出せれば、問題のtyoityoi()メソッドの中身がおかしいとか、エラーの原因を特定するのに役立つと思います。 >もしくは、モデルのメソッドを実行するときに動くCakePHPのコードの位置を、 教えていただけませんか? 特に厳しい制限はなかったと思います。質問者さんが書いているような方法で動くと思います。 あと、実際に出ているエラーメッセージを書いておくと、回答が集まりやすいと思います。 ではでは。。。
補足
>manimani2さん ありがとうございます。manimani2さんのお答えにあるように、 モデルにgetRecordCount()という関数を記述し、コントローラーで呼び出しましたが。しかし、やはりSQLエラーになります。 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 'getRecordCount' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684] エラーメッセージは上記で、SQL文のシンタックスエラーです。実際にCakePHPが実行したSQL文を、ログに吐き出すようにしたところ、getRecordCountがSQL文として解釈されて実行されており、そのためSQLシンタックスエラーが出てしまう状態です。 >もしくは、モデルのメソッドを実行するときに動くCakePHPのコードの位置を、教えていただけませんか? これについてですが、$this->Model->method()というコードをコントローラーから実行したときに、CakePHPのソースコードのどこが実行されるのかを、教えて頂ければと思いました。それが分かれば、今回の問題の原因が分かるかもと思いまして。 manimani2さん、ありがとうございました。
お礼
大変失礼しました。原因は、モデルの名前にありました。 質問に書いたコードでは省略した部分に原因が・・・・。 Enquete_200911_001というテーブルがあり、そのアンダーバーを削って、Enquete200911001というモデルを作ったのですが、save()は出来ても、自作のメソッドが実行できませんでした。 $this->Enquete200911001->myMethod() このmyMethodがSQL文と解釈されていました。 質問文に不足がありまして、すみませんでした。 ちなみに、こういった名前付けの問題は、よく見られる話題なのでしょうか?