books
、books_categories
およびの 3 つのテーブルがありcategories
ます。
books:
...
categories:
id, name, parent_id
books_categories:
id book_id category_id
したがって、1 つの本が多くのカテゴリに属し、1 つのカテゴリに多くの本が含まれる場合があります。また、カテゴリはツリーです。各カテゴリには親 (またはNULL
) (および実質的に子) があります。問題は、カテゴリがある場合: a
> b
>c
本がカテゴリに属して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'
必要がありますか?