@
sabinudash,
I have found an example of pulling random entities from a repo here:
https://stackoverflow.com/a/39223980/1632233
I went ahead and tried to apply this to product repo and here is the implementation I came up with:
Code:
<?php
// vim: set ts=4 sw=4 sts=4 et:
namespace XLite\Module\XCExample\ModuleDemo\Model\Repo;
/**
* The "product" model repository
*/
abstract class Product extends \XLite\Model\Repo\Product implements \XLite\Base\IDecorator
{
public function getRandomProducts($amount = 7)
{
return $this->getRandomProductsNativeQuery($amount)->getResult();
}
/**
* @param int $amount
* @return ORM\NativeQuery
*/
public function getRandomProductsNativeQuery($amount = 7)
{
# set entity name
$table = $this->getClassMetadata()
->getTableName();
# create rsm object
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addEntityResult($this->getEntityName(), 'p');
$rsm->addFieldResult('p', 'product_id', 'product_id');
# make query
return $this->getEntityManager()->createNativeQuery("
SELECT p.product_id FROM {$table} p ORDER BY RAND() LIMIT 0, {$amount}
", $rsm);
}
}
Please, let me know if it works for you.
Tony