未检索到CakePHP可包含模型

未检索到CakePHP可包含模型,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我在下面的代码中找到了一个标记。我想包含所有与未被“删除”的标签相关的帖子。然后我想找到这些帖子所属的所有标签 作为测试,我通过contain在第三级递归中附加了两个模型:Tag和User。containable行为将检索与Post关联的用户模型,但与Post关联的标记模型不会出现。你知道CakePHP中是否允许这种类型的递归(基于原始模型)吗 我已经尝试过包含和不包含标记条件,所以我知道这不会导致问题。如果这就是问题所在,那么我应该得到一个空的标记数组,但是什么都没有 $tag = $this

我在下面的代码中找到了一个标记。我想包含所有与未被“删除”的标签相关的帖子。然后我想找到这些帖子所属的所有标签

作为测试,我通过contain在第三级递归中附加了两个模型:Tag和User。containable行为将检索与Post关联的用户模型,但与Post关联的标记模型不会出现。你知道CakePHP中是否允许这种类型的递归(基于原始模型)吗

我已经尝试过包含和不包含标记条件,所以我知道这不会导致问题。如果这就是问题所在,那么我应该得到一个空的标记数组,但是什么都没有

$tag = $this->Tag->find(
    'first',
    array(
        'conditions' => $conditions,
        'contain' => array(
            'Post' => array(
                'conditions' => array(
                    'Post.deleted' => 0
                ),
                'limit' => 25,
                'User',
                'Tag' => array(
                    'conditions' => array(
                        'Tag.deleted' => 0
                    )
                )
            )
        )
    )
);

我知道有很多方法可以解决这个问题,但我特别感兴趣的是可包含行为为什么会这样做。我确信,在这件事上,获取一篇文章的所有标签要比在文章结果中循环并重新查询标签更有效。我希望有人会对这个问题有经验,但我今天将深入研究CakePHP可包含的行为代码,看看它是框架的目标代码还是可能的错误。

这不是问题的真正答案(这更多是为什么会发生的原因),但我认为这就是它发生的原因以及如何避免它。我深入研究了Containable类,查询是用完整的标记模型构建的,这让我相信模型类中的查询和关联可能正在删除它,因为标记是不明确的。标记将同时出现在Post记录的左侧和右侧,因此它可能会被删除以防止递归循环。我太懒了,没有深入到模型类中去得到真正的答案

为了解决这个问题,我绑定了一个名为PT的模型别名来即时发布。我把这个别名添加到包含代码中,瞧,我的标签就在那里

$this->Tag->Post->bindModel(
            array(
                'hasAndBelongsToMany' => array(
                    'PT' => array(
                        'className' => 'Tag'
                    )
                )
            )
        );
和包含代码

$tag = $this->Tag->find(
            'first',
            array(
                'conditions' => $conditions,
                'contain' => array(
                    'Post' => array(
                        'conditions' => array(
                            'Post.deleted' => 0
                        ),
                        'User',
                        'PT' => array(
                            'conditions' => array(
                                'PT.deleted' => 0
                            )
                        )
                    )
                )
            )
        );

这似乎是问题的原因,因此我将问题标记为已回答。我犯了一个错误,没有使用别名和模型名称。谢谢