<?php
namespace AdminBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
class BaseRepository extends EntityRepository implements ContainerAwareInterface
{
protected $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function persist($object) {
$this->_em->persist($object);
}
public function flush() {
$this->_em->flush();
}
/**
* @param array $fields
* @param null $limit
* @param null $offset
* @param null $orderBy
* @return array
*/
public function findAllArray($fields = array(), $limit = null, $offset = null, $orderBy = null){
$queryBuilder = $this->createQueryBuilder("a");
if (!empty($fields)) {
foreach ($fields as $field) {
$selectFields[] = 'a.'.$field;
}
$queryBuilder->select($selectFields);
}
if ($orderBy != null) {
$queryBuilder->orderBy("a.".key($orderBy), current($orderBy));
}
$queryBuilder->setFirstResult($offset)
->setMaxResults($limit);
return $queryBuilder->getQuery()->getArrayResult();
}
/**
* @param array $criteria
* @param array|null $orderBy
* @return mixed
* @throws \Doctrine\ORM\NoResultException
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function findOneByArray(array $criteria, array $orderBy = null)
{
$queryBuilder = $this->createQueryBuilder("a");
foreach($criteria as $key => $item){
$queryBuilder->andWhere("a." . $key . "= :" . $key)
->setParameter($key, $item);
}
if ($orderBy != null) {
$queryBuilder->orderBy("a.".key($orderBy), current($orderBy));
}
return $queryBuilder->getQuery()->getOneOrNullResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
}
public function save($object) {
$this->_em->persist($object);
$this->_em->flush();
}
public function remove($object) {
$this->_em->remove($object);
$this->_em->flush();
}
}