1

我有三个表booksbooks_categoriescategories

books:
   ...

categories:
    id, name, parent_id

books_categories:
    id book_id category_id

所以一本书可能有很多类别,一个类别可能有很多书。类别是一棵树 - 每个类别都有父(或NULL)(实际上是子)。问题是,如果我们有类别:a> b>c并且 book 属于 category a,这并不意味着它属于子类别bc......而且我想从类别中获取所有书籍,a甚至从子类别中获取。

现在,我从指定类别中获取所有书籍,如下所示:

$options['joins'] = array(    
                array('table' => 'books_categories',
                      'alias' => 'BookCategory',
                      'type' => 'inner', 
                      'conditions' => array('Book.id = BookCategory.book_id')
                ),
                array('table' => 'categories',
                      'alias' => 'Category',
                      'type' => 'inner',
                      'conditions' => array('BookCategory.category_id = Category.id')
               ));

               $options['conditions'] = array('Category.id' => '5');


$this->set('books', $this->Book->find('all', $options));

这正确地找到了类别中的所有书籍id = '5'。而且我还需要来自“5”子类别的书籍 - 是否可以在单个查询中?或者我必须获取所有父子类别(如何),然后在条件设置中'Category.id' => '5' OR 'Category.id => '6'等等?

4

1 回答 1

1

尝试这个 :

$allCategories = $this->Book->find('threaded');
于 2012-04-23T16:07:43.197 回答