2016-08-09 58 views
2

Ich habe zwei Entitäten Categorie und ChampCat mit ManyToMany Beziehung und ich mag mit verwandten ChampCat Liste der Kategorien erhalten, indem Lehre mit Querybuilder so habe ich diese Abfrage verwendet:
Problem bei dem Versuch, Lehre verwenden Querybuilder

class CategorieRepository extends \Doctrine\ORM\EntityRepository 
{ 
    public function myFindCategories(array $tab){ 

     $em = $this->getEntityManager(); 

     $query = $em->select(array('cat', 'ch')) 
        ->from('AnnonceBundle\Entity\Categorie', 'cat') 
        ->join('cat.champsCat', 'ch') 
        ->where('cat.id In (:tabOfIds)') 
        ->setParameter('tabOfIds', array_values($tab)) 
        ->getQuery(); 

     return $query->getResult(); 

    } 


} 

hier können u die Kategorie Entity sehen:

<?php 

namespace AnnonceBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Categorie 
* 
* @ORM\Table(name="categorie") 
* @ORM\Entity(repositoryClass="AnnonceBundle\Repository\CategorieRepository") 
*/ 
class Categorie implements \JsonSerializable 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="refCat", type="string", length=100) 
    */ 
    private $refCat; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="libelleCat", type="string", length=50) 
    */ 
    private $libelleCat; 

    /** 
    * @ORM\ManyToMany(targetEntity="AnnonceBundle\Entity\ChampCat",cascade={"persist"}) 
    */ 
    private $champsCat; 

    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set refCat 
    * 
    * @param string $refCat 
    * 
    * @return Categorie 
    */ 
    public function setRefCat($refCat) 
    { 
     $this->refCat = $refCat; 

     return $this; 
    } 

    /** 
    * Get refCat 
    * 
    * @return string 
    */ 
    public function getRefCat() 
    { 
     return $this->refCat; 
    } 

    /** 
    * Set libelleCat 
    * 
    * @param string $libelleCat 
    * 
    * @return Categorie 
    */ 
    public function setLibelleCat($libelleCat) 
    { 
     $this->libelleCat = $libelleCat; 

     return $this; 
    } 

    /** 
    * Get libelleCat 
    * 
    * @return string 
    */ 
    public function getLibelleCat() 
    { 
     return $this->libelleCat; 
    } 

    /** 
    * Set champsCat 
    * 
    * @param \AnnonceBundle\Entity\ChampCat $champsCat 
    * 
    * @return Categorie 
    */ 
    public function setChampsCat(\AnnonceBundle\Entity\ChampCat $champsCat = null) 
    { 
     $this->champsCat = $champsCat; 

     return $this; 
    } 

    /** 
    * Get champsCat 
    * 
    * @return \AnnonceBundle\Entity\ChampCat 
    */ 
    public function getChampsCat() 
    { 
     return $this->champsCat; 
    } 
    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->champsCat = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Add champsCat 
    * 
    * @param \AnnonceBundle\Entity\ChampCat $champsCat 
    * 
    * @return Categorie 
    */ 
    public function addChampsCat(\AnnonceBundle\Entity\ChampCat $champsCat) 
    { 
     $this->champsCat[] = $champsCat; 

     return $this; 
    } 

    /** 
    * Remove champsCat 
    * 
    * @param \AnnonceBundle\Entity\ChampCat $champsCat 
    */ 
    public function removeChampsCat(\AnnonceBundle\Entity\ChampCat $champsCat) 
    { 
     $this->champsCat->removeElement($champsCat); 
    } 

    function jsonSerialize() 
    { 
     return get_object_vars($this); 
    } 
} 

Und das ist ChamCat Entity:

<?php 

namespace AnnonceBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* ChampCat 
* 
* @ORM\Table(name="champ_cat") 
* @ORM\Entity(repositoryClass="AnnonceBundle\Repository\ChampCatRepository") 
*/ 
class ChampCat implements \JsonSerializable 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    *@var string 
    * 
    * @ORM\Column(name="refCh", type="string") 
    */ 
    private $refCh; 



    /** 
    * @var string 
    * 
    * @ORM\Column(name="nom_ch", type="string", length=255) 
    */ 
    private $nomCh; 

    /** 
    * @var bool 
    * 
    * @ORM\Column(name="app_ch", type="boolean") 
    */ 
    private $appCh; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="format_ch", type="string", length=255) 
    */ 
    private $formatCh; 


    /** 
    * Get id 
    * 
    * @return string 
    */ 
    public function getId() 
    { 
     return $this->refCh; 
    } 

    /** 
    * Set refCh 
    * 
    * @param integer $refCh 
    * @return ChampCat 
    */ 
    public function setRefCh($refCh) 
    { 
     $this->refCh = $refCh; 

     return $this; 
    } 

    /** 
    * Get refCh 
    * 
    * @return integer 
    */ 
    public function getRefCh() 
    { 
     return $this->refCh; 
    } 

    /** 
    * Set nomCh 
    * 
    * @param string $nomCh 
    * @return ChampCat 
    */ 
    public function setNomCh($nomCh) 
    { 
     $this->nomCh = $nomCh; 

     return $this; 
    } 

    /** 
    * Get nomCh 
    * 
    * @return string 
    */ 
    public function getNomCh() 
    { 
     return $this->nomCh; 
    } 

    /** 
    * Set appCh 
    * 
    * @param boolean $appCh 
    * @return ChampCat 
    */ 
    public function setAppCh($appCh) 
    { 
     $this->appCh = $appCh; 

     return $this; 
    } 

    /** 
    * Get appCh 
    * 
    * @return boolean 
    */ 
    public function getAppCh() 
    { 
     return $this->appCh; 
    } 

    /** 
    * Set formatCh 
    * 
    * @param string $formatCh 
    * @return ChampCat 
    */ 
    public function setFormatCh($formatCh) 
    { 
     $this->formatCh = $formatCh; 

     return $this; 
    } 

    /** 
    * Get formatCh 
    * 
    * @return string 
    */ 
    public function getFormatCh() 
    { 
     return $this->formatCh; 
    } 

    function jsonSerialize() 
    { 
     return get_object_vars($this); 
    } 
} 

Leider hat diese Abfrage nicht funktioniert, was fehlt mir also?

+1

Was meinst du mit "es hat nicht funktioniert" es hat einen Fehler, oder fals Ergebnisse? – goto

+0

Ich benutze diese Abfrage über Ajax-Funktion und das Ergebnis ist "500 (Interner Serverfehler)" was bedeutet, dass ein Problem in der Abfrage ist. –

+0

Ja, können Sie uns die Exception-Nachricht geben? Es ist in Ihrem Projekt app/log – goto

Antwort

0

Funktioniert es mit dieser Syntax?

public function myFindCategories(array $tab){ 

    if(count($tab) == 0) return []; //or IN() will bug with an empty array 


    $query = $this->createQueryBuilder('cat') 
       ->addSelect('ch') 
       ->innerJoin('cat.champsCat', 'ch') 
       ->where('cat.id in (:tabOfIds)') 
       ->setParameter('tabOfIds', $tab) 
       ->getQuery(); 

    return $query->getResult(); 

} 
+0

nein Entschuldigung, das funktioniert nicht. Das Problem liegt nicht in der Variablen $, weil es nie leer ist, um es zu testen, aber ich denke, es gibt ein Problem in der Abfragesyntax, aber ich bin mir nicht sicher. –

+0

Wenn Sie in Ihrer Repository-Klasse sind, versuchen Sie es mit meiner bearbeiteten Antwort (ohne den $ em-Aufruf?) – goto

+0

Vielen Dank, dass es funktioniert, aber ich finde die ChampCat-Entität nicht in der Kategorienliste! Das ist das Ergebnis [{"id": 2, "refCat": "002", "libelleCat": "cat2", "champsCat": {}}], chamsCat ist leer! –