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

Remove unnecessary joins in CakePHP 3 pagination

我有两个表:

Books
    id
    publisher_id
Publishers
    id
    name

图书与 BooksTable class 中的出版商相关联,如下所示:

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)

分页组件会自动从第二个计数查询中删除不需要的代码,例如 GROUPORDER 等,但会保留 LEFT JOIN.
为什么不删除它是有原因的,有没有办法告诉它在查询行数时忽略某些关联?

举例来说,以下是您的 table.

的数据
Books

id | publisher_id
-----------------
1  | 1
2  | 1

Publishers    
id | name
----------
1 | publisher1
1 | publisher2

LEFT JOIN output
book_id | publisher_id | name
-----------------------
1 | 1 | publisher1
1 | 1 | publisher2
2 | 1  | publisher1
2 | 1 | publisher2

我知道,您的情况 publisher_id 是独一无二的。但并非一直如此。现在您可以看到 LEFT JOIN 的行数为 4,而那里只有 2 本书。