CakePHPは - HABTMでモデル関数を呼び出します
-
26-09-2019 - |
質問
私は2つのテーブルを持っている、ページと投稿HABTMにあり、pages_postsを使用して結合され、そのテーブルに参加します。
HABTMの定義と一緒にマイページのモデルは機能が含まれています..
class Page extends AppModel
{
var $name = "Page";
......
......
function callthis()
{
return $this->find('all');;
}
}
私の記事コントローラから、私はその関数を呼び出すようにしようとしている..
class PostsController extends AppController
{
....
....
function index()
{
$returned = $this->Post->Page->callthis();
}
}
でこの結果
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 'threadedpages' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 681]
また、デバッグ出力:
コード
$out = null;
if ($error) {
trigger_error('<span style="color:Red;text-align:left"><b>' . __('SQL Error:', true) . "</b> {$this->error}</span>", E_USER_WARNING);
コンテキスト
$sql = "threadedpages"
$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 'threadedpages' at line 1"
$out = null
タグの呼び出し
DboSource::showQuery() - CORE/cake/libs/model/datasources/dbo_source.php, line 681
DboSource::execute() - CORE/cake/libs/model/datasources/dbo_source.php, line 266
DboSource::fetchAll() - CORE/cake/libs/model/datasources/dbo_source.php, line 410
DboSource::query() - CORE/cake/libs/model/datasources/dbo_source.php, line 364
Model::call__() - CORE/cake/libs/model/model.php, line 502
Overloadable::__call() - CORE/cake/libs/overloadable_php5.php, line 50
AppModel::threadedpages() - [internal], line ??
PostsController::admin_index() - CORE/plugins/cakey/controllers/posts_controller.php, line 11
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83
関連するモデル関数を呼び出すと、CakePHPの右側に可能なはず?もし私たちのチェックアウト http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM に、私たちは、その
を見ることができます$this->Recipe->Tag->find('all', array('conditions'=>array('Tag.name'=>'Dessert')));
Tagモデルの検索()関数は、私が関連する投稿コントローラ?からページモデルのcallthis()関数を呼び出すことはできませんなぜ関連するレシピコントローラから呼び出すことができます。
解決 2
としてステファンとモレノは、私の関係に問題が実際にあった、指摘しています。
http://book.cakephp.org/view/1114/Pluginによると、 -Models に、私たちはあなたのプラグイン内のモデルを参照する必要がある場合は、我々はドットで区切られ、モデル名にプラグイン名を含める必要があります。
私はクラス名としてPlugin.Modelを使用せずに、直接モデルを参照しました。お時間のためのみんなありがとう..
他のヒント
問題が最も可能性が高いあなたの関係です。私のbetchあなたが行う場合は、
$this->Post->Page->find('all');
あなたはまだエラーを取得します。
を確認してくださいページのモデルはPostsControllerの(任意の関数の前に、コントローラのファイルの先頭付近でなければなりません)にロードされます:
var $uses = array('Post', 'Page');
次に、あなただけの呼び出し
のことができるようにすべきです$this->Page->callthis();
ねえ、私は同じ問題を抱えていました。
私は、それが解決され、PluginName.ModelNameを追加しました。 プラグインモデルの前にPluginNameを追加するので、
、非常に良い習慣ですおかげで、 ビジェイ