为什么我的模型不能连接?

时间:2011-07-24 18:17:13

标签: php cakephp cakephp-1.3

我正在尝试在CakePHP应用程序中链接两个(和更多)模型。

我有两个数据库表:clientsnotes。我有以下模型类:

<?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行

3 个答案:

答案 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.phpnote.php我将其保存为client_model.phpnote_model.php。现在一切正常!