Я только что наследовал проект, и мне нужно переработать немного кода, чтобы разбиение на страницы бесконечного скроллера продолжало работать должным образом.Комплексный рефакторинг запросов CakePHP
В настоящий момент код захватывает все категории и их продукты и списки. Мне нужно отредактировать его так, чтобы возвращались только те категории, которые имеют, продукты, имеющие активные списки.
Вот код, который в конечном счете работал:
$catData = $this->find('all',array(
'conditions' => array(
'Indexer.type' => 'Category',
'Listing.listing_id IS NOT NULL'
),
'joins' => array(
array('table' => 'peeka_product_category_link',
'alias' => 'Link',
'type' => 'LEFT',
'conditions' => array(
'Link.category_id = Category.category_id'
)
),
array('table' => 'peeka_products',
'alias' => 'Product',
'type' => 'LEFT',
'conditions' => array(
'Product.product_id = Link.product_id'
)
),
array('table' => 'peeka_listings',
'alias' => 'Listing',
'type' => 'LEFT',
'conditions' => array(
'Listing.product_id = Product.product_id',
'Listing.listing_end_date >=' => $date,
'Listing.listing_start_date <=' => $date,
"Listing.listing_status = 'Active'"
)
),
),
'order' => 'Category.category_name ASC',
'limit' => $set_limit,
'fields' => array('Category.category_id, Category.category_name, Indexer.url'),
'group' => 'Category.category_id',
'recursive' => 0
));
EDIT: Благодаря Дейву это работает, и теперь я просто хотел отправить его для дальнейшего использования. Может быть, это поможет кому-то другому.
Я добавил несколько соединений и, похоже, работает. Теперь есть способ выбрать отдельный, чтобы возвращался только один экземпляр категории? – tmartin314
@whatshakin - попробуйте использовать 'GROUP BY' (или в Cake, это« группа »). – Dave