我有三个表books
:books_categories
和categories
。
books:
...
categories:
id, name, parent_id
books_categories:
id book_id category_id
所以一本书可能有很多类别,一个类别可能有很多书。类别是一棵树 - 每个类别都有父(或NULL
)(实际上是子)。问题是,如果我们有类别:a
> b
>c
并且 book 属于 category a
,这并不意味着它属于子类别b
或c
......而且我想从类别中获取所有书籍,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'
等等?