symfony2 createQueryBuilder
Posted
技术标签:
【中文标题】symfony2 createQueryBuilder【英文标题】: 【发布时间】:2014-09-13 18:54:27 【问题描述】:我正在尝试从存储库类中进行一个非常简单的 sql 查询,只是 select * from Adjudicacion where cursoAcademico_id=$cursoAcademicoActual;
:
这是我的实体:
/**
* Adjudicacion
*
* @ORM\Table(name="Adjudicacion")
* @ORM\Entity(repositoryClass="Administrador\AdjudicacionBundle\Entity\AdjudicacionRepository")
*/
class Adjudicacion
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="fechaInicio", type="date")
*/
private $fechaInicio;
/**
* @var \DateTime
*
* @ORM\Column(name="fechaFinal", type="date")
*/
private $fechaFinal;
/**
* @ORM\ManyToOne(targetEntity="Administrador\CursoAcademicoBundle\Entity\CursoAcademico")
*/
private $cursoAcademico;
/**
* @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionClaseBundle\Entity\AdjudicacionClase")
*/
private $adjudicacionClase;
/**
* @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionNumeroBundle\Entity\AdjudicacionNumero")
*/
private $adjudicacionNumero;
/**
* @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionTipoBundle\Entity\AdjudicacionTipo")
*/
private $adjudicacionTipo;
...getters and setters...
这是我的存储库类:
class AdjudicacionRepository extends EntityRepository
public function findAdjudicacionesActuales($cursoAcademicoActual)
$q=$this->createQueryBuilder('c')
->where('c.cursoAcademico_id = :cursoAcademico_id')
->setParameter('cursoAcademico_id', $cursoAcademicoActual)
->getQuery()->getResult();
return $q;
但它不起作用,屏幕只是空白,我没有得到任何结果。我也尝试过使用标准,如下所示:
public function findAdjudicacionesActuales2($cursoAcademicoActual)
$expr = Criteria::expr();
$criteria = Criteria::create();
$criteria->where($expr->eq("cursoAcademico_id", $cursoAcademicoActual));
return $this->matching($criteria);
我得到:Unrecognized field: cursoAcademico_id
这是在数据库中:
mysql> select * from Adjudicacion;
+----+-------------+------------+-------------------+----------------------+-----------------------+---------------------+
| id | fechaInicio | fechaFinal | cursoAcademico_id | adjudicacionClase_id | adjudicacionNumero_id | adjudicacionTipo_id |
+----+-------------+------------+-------------------+----------------------+-----------------------+---------------------+
| 2 | 2009-01-01 | 2009-01-01 | 7 | 3 | 4 | 3 |
| 6 | 2009-01-01 | 2009-01-01 | 7 | 3 | 4 | 4 |
| 7 | 2009-01-01 | 2009-01-01 | 7 | 3 | 5 | 3 |
| 8 | 2009-01-01 | 2009-01-01 | 7 | 3 | 5 | 4 |
+----+-------------+------------+-------------------+----------------------+-----------------------+---------------------+
怎么了?
【问题讨论】:
【参考方案1】:从技术上讲,在 Doctrine ORM 看来,cursoAcademico_id
字段并不存在。它用于在 2 个表之间创建链接以创建对象,但您不能在任何地方使用它。
要搜索具有给定 id 的对象,您应该使用连接并匹配被连接对象的 id,例如..
$q=$this->createQueryBuilder('a')
// Create builder in 'Adjudicacion' repository so 'a' rather than 'c'
->join('a.cursoAcademico', 'c')
// Join 'Adjudicacion' to 'CursoAcademico'
->where('c.id = :cursoAcademico_id')
// match id of joined `CursoAcademico`
->setParameter('cursoAcademico_id', $cursoAcademicoActual)
->getQuery()->getResult();
return $q;
【讨论】:
以上是关于symfony2 createQueryBuilder的主要内容,如果未能解决你的问题,请参考以下文章