【发布时间】:2016-08-09 08:44:38
【问题描述】:
我有两个实体 Categorie 和 ChampCat 与 ManyToMany 关系,我想通过使用学说 QueryBuilder 获取具有相关 ChampCat 的类别列表,所以我使用了这个查询:
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();
}
}
在这里你可以看到类别实体:
<?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);
}
}
这是 ChamCat 实体:
<?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);
}
}
不幸的是,这个查询不起作用,所以我错过了什么?
【问题讨论】:
-
您所说的“它不起作用”是什么意思,它有错误,或者结果是错误的?
-
我正在通过 ajax 函数使用此查询,结果为“500(内部服务器错误)”,这意味着查询中存在问题。
-
是的,您可以给我们异常消息吗?它在您的项目应用程序/日志中
-
哦抱歉不知道这个文件:)。这是例外:[2016-08-09 11:14:10] request.CRITICAL:未捕获的 PHP 异常 RuntimeException:“在调用 getRootAlias() 之前未设置别名。”在 /var/www/sbc_project/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php 第 423 行 {"exception":"[object] (RuntimeException(code: 0): 在调用 getRootAlias( ). 在 /var/www/sbc_project/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)"} []
标签: php symfony doctrine-orm doctrine