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的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 教义左连接

Symfony2 Doctrine2 获取所有表

如何使用 Doctrine 在 Symfony2 中实现子查询?

如何使用 symfony2 学说查询生成器选择不同的查询?

Symfony 2 Doctrine 内存使用情况

Symfony 2:使用理论查询构建器在非相关表上进行 INNER JOIN