2012-04-23 74 views
1

我有三個表:books,books_categoriescategories蛋糕php樹模型連接表

books: 
    ... 

categories: 
    id, name, parent_id 

books_categories: 
    id book_id category_id 

所以一本書可能在很多類別中,一個類別可能有很多書。 和類別是一棵樹 - 每個類別都有父級(或NULL)(幾乎是兒童)。 的問題是,如果我們有三類:a>b>c和書籍屬於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'等?

回答

1

試試這個:

$allCategories = $this->Book->find('threaded'); 
+0

這不利於 – user606521 2012-04-23 16:13:45

+0

@ user606521如果您設置的類別有相互之間的父母或關聯那麼它也許會有所幫助。請參閱http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-find-threaded – 2012-04-23 17:47:24