我正在尝试在CakePHP应用程序中链接两个(和更多)模型。
我有两个数据库表:clients
和notes
。我有以下模型类:
<?php
class Client extends AppModel {
var $name = 'Client';
var $hasMany = 'Note';
}
和
<?php
class Note extends AppModel {
var $name = 'Note';
var $belongsTo = 'Client';
}
但是,我认为他们没有联系。当我在控制器中运行print_r($this->Client->find());
时,我得到以下输出:
Array
(
[Client] => Array
(
[id] => 1
[name] => Martin Bean
)
)
如何为每个Note
获取相关的Client
记录?
编辑:尽管在我的模型类中有上述内容,但如果我将以下内容放在控制器中:
$this->Client->Behaviors->attach('Containable');
print_r($this->Client->find('all', array('contain' => 'Note')));
我收到以下错误消息:
警告(512):模型“客户端”与模型“注意”无关[CORE / cake / libs / model / behavior / containable.php,第363行]
我是否错过了CakePHP食谱中未解释的内容?
编辑2:我不知道这是否有任何帮助;这是调试输出:
ContainableBehavior :: containments() - CORE / cake / libs / model / behavior / containable.php,第363行 ContainableBehavior :: beforeFind() - CORE / cake / libs / model / behavior / containable.php,第121行 ModelBehavior :: dispatchMethod() - CORE / cake / libs / model / model_behavior.php,第169行 BehaviorCollection :: trigger() - CORE / cake / libs / model / model_behavior.php,第494行Model :: find() - CORE / cake / libs / model / model.php,第2108行PostsController :: index() - APP / controllers / posts_controller.php,第6行Dispatcher :: _ invoke() - CORE / cake / dispatcher.php,第204行Dispatcher :: dispatch() - CORE / cake / dispatcher.php,第171行[主要] - APP / webroot / index.php, 第83行
答案 0 :(得分:1)
所以只是为了确认
您有两个表'笔记'和'客户'
两者都有一个名为id
的主键'notes'包含'client_id'
有正确的测试数据,ID为1的'client'位于几个'note'行
上在您的find()调用之前,没有$ this-&gt; Client-&gt; recursive = -1赋值。
添加
$ var actsAs = array('Containable');
连接到客户端和Note模型,或者只是将其添加到app_model.php,以便将可包含的行为自动附加到每个模型。
P.S如果您最近添加了新表或修改了字段,请将debug设置为2以清除模型缓存。
答案 1 :(得分:0)
查找可容纳的。 $ this-&gt; Client-&gt; find('all',array('contains'=&gt; array('Note')));
答案 2 :(得分:0)
修正了它!我的模型的文件名不正确。
而不是client.php
或note.php
我将其保存为client_model.php
和note_model.php
。现在一切正常!