我试图从存储库类中创建一个非常简单的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 |
+----+-------------+------------+-------------------+----------------------+-----------------------+---------------------+
出了什么问题?
答案 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;