我有一个名为post
的表和名为status
的列string
,数据为published
或pending
。现在,我想使用EntityRepository
类自定义方法从该表中获取所有行,或者只修改现有方法。
我试过这个:
public function queryLatestPublished()
{
return $this->getEntityManager()
->createQuery('
SELECT p
FROM AppBundle:Post
WHERE p.staus == :st
ORDER BY p.created DESC
')
->setParameter('now', new 'DateTime())
->setParameter('st', 'published')
;
}
但是查询不返回任何内容。
您的代码中存在一些错误/问题
- 提供的参数数量与预期的数量不匹配
- 您不调用getResult(或任何其他类似execute的方法),因此实际上返回Query对象
- 我会更改方法的命名,因为它具有误导性
我也要换
- 你可能想以某种方式限制结果的数量
- 如果您在实体存储库中(在本例中为Post),则可以省略在使用querybuilder时使用
select
和from
我的主张:
/**
* @param int $limit
* @param int $offset
*
* @return Post[]
*/
public function findNewestPublished($limit = 10, $offset = 0)
{
return $this->createQueryBuilder('p')
->where('p.status = :status')
->setParameter('status', 'published')
->addOrderBy('p.createdAt', 'desc')
->getQuery()
->setFirstResult($offset)
->setMaxResults($limit)
->getResult();
}
我希望这能帮助
尝试这个
$em = $this->getDoctrine()->getManager();
$sql = "SELECT p FROM AppBundle:Post WHERE p.staus = ?1 ORDER BY p.created DESC'";
$query = $em->createQuery($sql);
$query->setParameter(1, 'published');
$result = $query->getResult();
有关详细信息,请参阅http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-选择示例