删除CakePHP 3分页中不必要的连接

时间:2015-06-08 07:10:07

标签: cakephp cakephp-3.0

我有两张桌子:

Books
    id
    publisher_id
Publishers
    id
    name

图书与BooksTable类中的发布商相关联,如下所示:

public function initialize(array $config){
    $this->belongsTo('Publishers');
}

我想显示一系列图书及其发布商,这是我的代码:

$query = $this->Books->find()
    ->contain('Publishers')
    ->select(['id', 'title', 'Publishers.name']);
$this->paginate($query);

这很好用,但是我注意到它产生了以下查询:

SELECT * FROM books Books
    LEFT JOIN publishers Publishers ON Publishers.id = (Books.publisher_id)
    ORDER BY Books.id desc LIMIT 20 OFFSET 0
SELECT (COUNT(*)) AS `count` FROM books Books
    LEFT JOIN publishers Publishers ON Publishers.id = (Books.publisher_id)

Pagination组件会自动从第二个计数查询中删除不需要的代码,例如GROUPORDER等,但会保留LEFT JOIN。 有没有理由不删除它,有没有办法告诉它在查询行数时忽略某些关联?

1 个答案:

答案 0 :(得分:0)

比如说下面是你桌子的数据。

recv()

我知道,对于您的情况,publisher_id是唯一的。但这不是一直以来的情况。现在你可以看到LEFT JOIN有行数4,而那里只有2本书。