symfony2 createQueryBuilder

时间:2014-07-22 19:27:33

标签: symfony doctrine-query

我试图从存储库类中创建一个非常简单的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 个答案:

答案 0 :(得分:10)

技术上,在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;