我有两张桌子:
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组件会自动从第二个计数查询中删除不需要的代码,例如GROUP
,ORDER
等,但会保留LEFT JOIN
。
有没有理由不删除它,有没有办法告诉它在查询行数时忽略某些关联?
答案 0 :(得分:0)
比如说下面是你桌子的数据。
recv()
我知道,对于您的情况,publisher_id是唯一的。但这不是一直以来的情况。现在你可以看到LEFT JOIN有行数4,而那里只有2本书。