1

booksbooks_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'必要がありますか?

4

1 に答える 1

1

これを試して :

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