【问题标题】:Why aren't my models linking?为什么我的模型没有链接?
【发布时间】:2011-07-24 18:17:12
【问题描述】:

我正在尝试在 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-&gt;Client-&gt;find()); 时,我得到以下输出:

Array
(
    [Client] => Array
        (
            [id] => 1
            [name] => Martin Bean
        )

)

如何获取每个Client 的关联Note 记录?

编辑:尽管在我的模型类中有上述内容,但如果我将以下内容放在控制器中:

$this->Client->Behaviors->attach('Containable');
print_r($this->Client->find('all', array('contain' => 'Note')));

我收到以下错误消息:

警告 (512):模型“Client”与模型“Note”没有关联 [CORE/cake/libs/model/behaviors/containable.php,第 363 行]

我是否遗漏了 CakePHP 食谱中未解释的内容?

编辑 2: 我不知道这是否有帮助;这是调试输出:

ContainableBehavior::containments() - CORE/cake/libs/model/behaviors/containable.php,第 363 行 ContainableBehavior::beforeFind() - CORE/cake/libs/model/behaviors/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 行 [main] - APP/webroot/index.php, 第 83 行

【问题讨论】:

  • 尝试清除模型缓存APP/tmp/cache/models - 特别是如果您在最初创建和运行这些文件后添加了这些更改。有时这就是全部~
  • 同时检查您的 (app_) 模型是否有任何 $this-&gt;recursive 痕迹 - 如果它小于 0,您将不会获得相关数据。

标签: php cakephp cakephp-1.3


【解决方案1】:

所以只是为了确认

你有两个表'notes'和'clients'

两者都有一个名为 id 的主键

'notes' 包含'client_id'

有正确的测试数据,id 为 1 的“客户端”在多个“注释”行上

在您的 find() 调用之前,没有 $this->Client->recursive = -1 赋值。

添加

$var actAs = array('Containable');

添加到您的 Client 和 Note 模型,或者将其添加到您的 app_model.php 以自动将可包含行为附加到每个模型。

P.S 如果您最近添加了新表或修改了字段,请将 debug 设置为 2 以清除我们的模型缓存。

【讨论】:

  • 没错。我已将调试级别设置为 2,刷新缓存,并将 $actsAs 声明添加到 app_model.php(我已将其移至我的 app/models/ 目录,但仍然收到 Model "Client" is not associated with model "Note" 错误消息。
  • 您是否放弃了附加行为调用?这很奇怪
  • 我已将控制器和相关模型的内容转储到此处:gist.github.com/1103085。希望这可以显示任何问题。
【解决方案2】:

查找可收容的。 $this->Client->find('all', array('contain' => array('Note')));

【讨论】:

  • 这些模型是偶然出现在插件中的吗?
  • 如果包含的意思是,文件命名不正确或某些权限错误。 cake 将在没有文件的情况下即时创建模型实例,这似乎是问题所在。做 pr(get_class($this->Client)) 它会说 AppModel.那么你就知道上面说的是真的。如果这说客户可能是注释是问题
【解决方案3】:

修好了!我的模型文件名不正确。

我将它们保存为client_model.phpnote_model.php 而不是client.phpnote.php。现在一切正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2019-07-18
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多