У меня есть две таблицы:Удалить ненужные включается в CakePHP 3 пагинация
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)
Компонент Разбивки автоматически удаляет ненужный код, такие как GROUP
, ORDER
и т.д. из второго счетчика запроса, но он держит LEFT JOIN
.
Есть ли причина, по которой это не удаляется, и есть ли способ сказать ему игнорировать определенные ассоциации при запросе счетчика строк?
'LEFT JOIN' необходимо, потому что, когда вы выполняете левое, присоединитесь к счету строк ** больше ** или равному количеству строк в таблице ВЛЕВО. так что это правильно. Если вам нужен пример, дайте мне знать. – jagad89
Не могли бы вы объяснить, не является ли издателем просто дополнительные данные? Я не вижу, как это повлияет на количество строк. – cmann
См. Ответ ниже. – jagad89