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

删除CakePHP 3分页中不必要的连接,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我有两张桌子: Books id publisher_id Publishers id name 图书与BooksTable类中的出版商关联,如下所示: public function initialize(array $config){ $this->belongsTo('Publishers'); } 我想显示书籍及其出版商的列表,以下是我的代码: $query = $this->Books->find() ->co

我有两张桌子:

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)
分页组件自动从第二次计数查询中删除不需要的代码,如
顺序
,但它保留
左联接


是否有原因不删除此项?是否有方法告诉它在查询行计数时忽略某些关联?

例如,下面是表的数据

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

我知道,就你的情况而言,出版商的id是独一无二的。但情况并非总是如此。现在您可以看到左连接的行数为4,而在那里只有2个book

需要左联接
,因为执行左联接时,行数大于或等于左表的行数。所以这是正确的。如果您需要示例,请让我知道。您能解释一下,出版商不只是额外的数据吗?我不知道这将如何影响行数。请参阅下面的答案。好的,谢谢,我从来没有想过publisher_id不是唯一的情况。我会将此标记为答案,但如果您或任何其他人可以发表评论,我仍然想知道是否有方法告诉CakePHP排除我们知道将是唯一的联接。@cmann我希望我能帮助您,但我不知道CakePHP。