在cakephp 2.x如何使用连接表获取第三个表数据?

时间:2016-11-07 05:40:45

标签: cakephp join associations jointable

'books
    id,name
categories
    id,name
books_categories
    id,book_id,category_id'

' App :: uses(' AppModel',' Model');     class Book扩展了AppModel {

    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"}]
}'

输出现在我只得到category_id:5它没关系但是我想要名称字段也是类别所以如何使用Book和Book_Category获取类别的名称字段?

1 个答案:

答案 0 :(得分:0)

通过将Categoy添加到Book_Category

来修改您的包含数组
$this->paginate = array(
    'contains' => array(
        'Book',
        'Publication',
        'Agerange',
        'Book_Category' => 'Category'
    ),
    'order' => 'Book.id ASC'
);

或使用hasAndBelongsToMany关联,它更简单

首先删除Book_Category

然后改变书籍模型

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'
    )
);

}

然后,在你的控制器中改变像这样的分页设置

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

@link Cakephp HABTM association