2016-11-07 15 views
1
'books 
    id,name 
categories 
    id,name 
books_categories 
    id,book_id,category_id' 

'App :: uses(' AppModel '、' Model '); クラスBookは私だけCATEGORY_IDを取得しています今のAppModel {cakephp 2.xどのように3番目のテーブルのデータを取得するテーブルを使用して結合?

public $useTable = 'books'; 
    public $belongsTo = array(

     'Agerange' => array(
      'className' => 'Agerange', 
      'foreignKey' => 'agerange_id' 
     ), 
     'Publication' => array(
      'className' => 'Publication', 
      'foreignKey' => 'publication_id' 
     ), 
    ); 

    public $hasMany = array(
     'Category' => array(
      'className' => 'Book_Category', 
      'foreignKey' => 'book_id', 
      'joinTable' => 'books_categories', 
      'fields' => array('Category_id',),   
     ) 
    ); 
} 

<?php 
App::uses('AppModel', 'Model'); 
class Book_Category extends AppModel { 
    public $useTable = 'books_categories'; 

    public $belongsTo = array(
     'Book' => array(
      'className' => 'Book', 
      'foreignKey' => 'book_id' 
     ), 
     'Category' => array(
      'className' => 'Category', 
      'foreignKey' => 'category_id' 
     ) 
    ); 


} 

in BooksController ...... 

$this->paginate = array(
      'contains'=>array('Book','Publication','Agerange','Book_Category'),    
      'order' => 'Book.id ASC'); 

      $books = $this->paginate('Book'); 

    enter code here 


{ 
Book: {id: "111", title: "ABC", subtitle: "English Today Primer", author: "Pruthviraj",…},…} 
Agerange:{id: "31", from: "0", to: "2", status: true} 
Book:{id: "111", title: "ABC", subtitle: "English Today Primer", author: "Pruthviraj",…} 
Category:[{Category_id: "5", book_id: "111"}] 
}' 

出力を拡張:5それは大丈夫ですが、私はそうどのように私はブックとBook_Categoryを使用して、カテゴリの名前のフィールドを取得することができ、カテゴリの名前でもフィールドをしたいですか?

+0

てみてください追加の$ this - >モデル - >のようにページネーションの設定を変更します。モデルに設定したbelongsTo条件またはw​​/e条件に従って、対応するデータを自動的に取得する –

答えて

0

CategoyBook_Category

$this->paginate = array(
    'contains' => array(
     'Book', 
     'Publication', 
     'Agerange', 
     'Book_Category' => 'Category' 
    ), 
    'order' => 'Book.id ASC' 
); 

または使用hasAndBelongsToManyの関連付けを追加して含まれている配列を変更し、それがその後の本モデル

class Book extends AppModel { 

public $useTable = 'books'; 

public $belongsTo = array(
    'Agerange' => array(
     'className' => 'Agerange', 
     'foreignKey' => 'agerange_id' 
    ), 
    'Publication' => array(
     'className' => 'Publication', 
     'foreignKey' => 'publication_id' 
    ), 
); 

public $hasAndBelongsToMany = array(
    'Category' => array(
     'className' => 'Category', 
     'joinTable' => 'books_categories', 
     'foreignKey' => 'book_id', 
     'associationForeignKey' => 'category_id' 
    ) 
); 
を変更 Book_Category

を削除して

スタートはるかに簡単です

}

次に、あなたのコントローラ内のテーブルにクエリを実行する前に= 2再帰この

​​

@link Cakephp HABTM association

関連する問題