<?php
namespace App\Repository;
use App\Entity\Blog;
use Doctrine\ORM\EntityRepository;
class BlogRepository extends EntityRepository
{
/**
* ListarOrdenados: Lista los blogs para el front
*
*
* @return Blog[]
*/
public function ListarOrdenados($empresa_id = '', $order = 'DESC', $start= "", $limit = "")
{
$consulta = $this->createQueryBuilder('b')
->andWhere('b.estado = 1');
if ($empresa_id != '') {
$consulta->leftJoin('b.empresa', 'e')
->andWhere('e.empresaId = :empresa_id')
->setParameter('empresa_id', $empresa_id);
}
$consulta->orderBy('b.createdAt', $order);
if($start !== ''){
$consulta->setFirstResult($start);
}
if($limit !== '') {
$consulta->setMaxResults($limit);
}
return $consulta->getQuery()->getResult();
}
/**
* ListarBlogsDeEmpresa: Lista los blogs de una empresa
*
*
* @return Blog[]
*/
public function ListarBlogsDeEmpresa($empresa_id)
{
$consulta = $this->createQueryBuilder('b');
if ($empresa_id != '') {
$consulta->leftJoin('b.empresa', 'e')
->andWhere('e.empresaId = :empresa_id')
->setParameter('empresa_id', $empresa_id);
}
$consulta->orderBy('b.createdAt', 'ASC');
return $consulta->getQuery()->getResult();
}
/**
* ListarBlogsDeUsuario: Lista los blogs de un usuario
*
*
* @return Blog[]
*/
public function ListarBlogsDeUsuario($usuario_id)
{
$consulta = $this->createQueryBuilder('b');
if ($usuario_id != '') {
$consulta->leftJoin('b.autor', 'u')
->andWhere('u.usuarioId = :usuario_id')
->setParameter('usuario_id', $usuario_id);
}
$consulta->orderBy('b.createdAt', 'ASC');
return $consulta->getQuery()->getResult();
}
/**
* BuscarPorUrl
* @param $url
* @return Blog|object|null
*/
public function BuscarPorUrl($url)
{
$criteria = array('url' => $url);
return $this->findOneBy($criteria);
}
/**
* ListarBlogs: Lista los blog
* @param int $start Inicio
* @param int $limit Limite
* @param string $sSearch Para buscar
*
* @return Blog[]
*/
public function ListarBlogs($start, $limit, $sSearch, $iSortCol_0, $sSortDir_0,
$empresa_id = "")
{
$consulta = $this->createQueryBuilder('b')
->leftJoin('b.empresa', 'e');
if ($sSearch != "") {
$consulta->andWhere('b.nombre LIKE :nombre OR b.descripcion LIKE :descripcion')
->setParameter('nombre', "%${sSearch}%")
->setParameter('descripcion', "%${sSearch}%");
}
if ($empresa_id != '') {
$consulta->andWhere('e.empresaId = :empresa_id')
->setParameter('empresa_id', $empresa_id);
}
if ($iSortCol_0 == 'empresa') {
$consulta->orderBy("e.nombre", $sSortDir_0);
} else {
$consulta->orderBy("b.$iSortCol_0", $sSortDir_0);
}
if ($limit > 0) {
$consulta->setMaxResults($limit);
}
return $consulta->setFirstResult($start)
->getQuery()->getResult();
}
/**
* TotalBlogs: Total de blog de la BD
* @param string $sSearch Para buscar
*
* @author Marcel
*/
public function TotalBlogs($sSearch, $empresa_id = "")
{
$em = $this->getEntityManager();
$consulta = 'SELECT COUNT(b.blogId) FROM App\Entity\Blog b ';
$join = ' LEFT JOIN b.empresa e ';
$where = '';
if ($sSearch != "") {
$esta_query = explode("WHERE", $where);
if (count($esta_query) == 1)
$where .= 'WHERE (b.nombre LIKE :nombre OR b.descripcion LIKE :descripcion) ';
else
$where .= 'AND (b.nombre LIKE :nombre OR b.descripcion LIKE :descripcion) ';
}
if ($empresa_id != "") {
$esta_query = explode("WHERE", $where);
if (count($esta_query) == 1) {
$where .= 'WHERE (e.empresaId = :empresa_id) ';
} else {
$where .= ' AND (e.empresaId = :empresa_id) ';
}
}
$consulta .= $join;
$consulta .= $where;
$query = $em->createQuery($consulta);
//Adicionar parametros
//$sSearch
$esta_query_nombre = substr_count($consulta, ':nombre');
if ($esta_query_nombre == 1)
$query->setParameter('nombre', "%${sSearch}%");
$esta_query_descripcion = substr_count($consulta, ':descripcion');
if ($esta_query_descripcion == 1)
$query->setParameter('descripcion', "%${sSearch}%");
$esta_query_empresa_id = substr_count($consulta, ':empresa_id');
if ($esta_query_empresa_id == 1) {
$query->setParameter('empresa_id', $empresa_id);
}
return $query->getSingleScalarResult();
}
}