Número de lecturas: 172
{lang: 'es-419'}

Acá esta el enlace en español en stackoverflow: https://es.stackoverflow.com/questions/211532/como-tener-un-repositorio-personalizado-no-asociado-a-una-entidad-en-symfony

Esta pregunta la coloque en la versión de ingles de stackoverflow: https://stackoverflow.com/questions/53090535/having-a-custom-repository-not-associated-to-an-entity-in-symfony

Luego de varias preguntas pude tener la respuesta que necesitaba, sobre la misma genere un resumen, espero les sirva: https://stackoverflow.com/a/53176838/2400373

Uso symfony 3.3.x . De esta manera solucione el problema

Archivo service.yml:

//service.yml
services:
     app.queriesmanager:
          class: AppBundle\Services\QueriesManager
          autowire: true

Archivo AppBundle\Services\QueriesManager.php

//AppBundle\Services\QueriesManager.php
<?php
 
namespace AppBundle\Services;
 
use Doctrine\ORM\EntityManagerInterface;
 
class QueriesManager  {
    protected $entityManager;
 
    public function __construct(EntityManagerInterface $entityManager) {
        $this->entityManager = $entityManager;
    }
 
    public function searchAdvance($var,$var1,$var2,$var3)
    {
        $dql1 = "";
        $dql2 = "";
        $dql = "SELECT pl
                      FROM BackendBundle:Products p
                      JOIN BackendBundle:Pricelist pl
                      WITH p.peachitemid =  pl.peachitemid
                      WHERE p.hasimages =  1
                      AND p.active = 'FALSE'
                      AND p.imagesamazon1 = 1
                      AND p.imagesamazon2 = 1
                      AND (p.descriptionforsales like '%$var%' OR p.itemid like '%$var%')";
 
        if ($var1 != "select") {
            $dql1 = " AND p.newcategory='$var1' AND p.newsubcategory='$var2' ";
        }
        if ($var3 == "150") {
            $dql2 = " AND pl.retail < 150";
        }
        if ($var3 == "200") {
            $dql2 = " AND pl.retail > 150 AND pl.retail < 250 ";
        }
        if ($var3 == "250") {
            $dql2 = " AND pl.retail > 250 ";
        }
 
        $dql1 .= $dql2;
        $dql .= $dql1;
        $query=$this->entityManager->createQuery($dql);
        $query = $query->getResult();
        return $query;
 
    }
}

Archivo DefaultController.php

//Use the service in controller
$query=$this->get('app.queriesmanager')->searchAdvance($var,$var1,$var2,$var3);

Espero les pueda ayudar.

Be Sociable, Share!