CakePHP - HABTM关系和find()

时间:2012-01-09 01:45:39

标签: cakephp has-and-belongs-to-many

这是我的情况,我有一个可以属于多个类别的Post模型。我想出了怎么做:

class Post extends AppModel
{
    var $hasAndBelongsToMany = array('Category');
}

分类模型:

class Category extends AppModel
{
    var $hasAndBelongsToMany = array ('Post');
}

现在,这一切都很好。但我无法弄清楚如何搜索属于某个类别的帖子,例如ID为1的“新闻”用于:

class CategoriesController extends AppController {
    function view ($id = 0) {
        // doesnt work
        $this->Category->Video->find ('all', array('conditions' => array('category_id' => $id));
    }
}

我一直试图在Google和CookBook上找到答案,但还没有找到答案。有谁知道如何实现这一目标?

谢谢。

3 个答案:

答案 0 :(得分:2)

当您在类别和帖子模型上显示关联,而不是视频时,您正在视频模型上执行查找。假设这是一个拼写错误:

如果你想按照你的说法搜索post_controller.php中“新闻”类别的帖子:

$this->Post->Category->find('all', array('conditions'=>array('Category.name'=>'News')) );

或者在categories_controller.php

$this->Category->find('all', array('conditions'=>array('Category.name'=>'News')) );

答案 1 :(得分:0)

您可以执行以下操作:

$this->Category->bindModel(array(
        'hasOne' => array(
            'CategoriesVideo'
        ),
    ));
    return $this->Video->find('all', array(
        'conditions' => array(
            'CategoriesVideo.category_id' => $id,
            ),
        ),
    ));
编辑:抱歉,看错了代码。这应该有用。

答案 2 :(得分:0)

您最简单的选择是搜索类别本身,并允许recursive级别还返回相关帖子(或视频,或您正在做的任何事情):

//in the category controller
$this->Category->find('all', array('conditions'=>array('Category.id'=>$id));

有很多选项可用于搜索HABTM数据,但上述内容最简单。

以下是CakePHP书籍中描述查询HABTM关系的不同方法的页面:

http://book.cakephp.org/1.3/view/1044/hasAndBelongsToMany-HABTM