protected function queryInSameCollections($productCollections, $limit = null)
{
$collections = array();
$productIds = array();
foreach ($productCollections as $pCollection) {
$collections[] = $pCollection->getCollection();
if (false === array_search($pCollection->getProduct()->getId(), $productIds)) {
$productIds[] = $pCollection->getProduct()->getId();
}
}
$queryBuilder = $this->getRepository()->createQueryBuilder('p')->distinct()->leftJoin('p.productCollections', 'pc')->where('pc.collection IN (:collections)')->andWhere('p.id NOT IN (:productIds)')->setParameter('collections', array_values($collections))->setParameter('productIds', array_values($productIds));
if (null !== $limit) {
$queryBuilder->setMaxResults($limit);
}
return $queryBuilder;
}