【问题标题】:How to find all where query in Symfony 3 Doctrine如何在 Symfony 3 Doctrine 中查找所有 where 查询
【发布时间】:2016-11-28 12:13:08
【问题描述】:

我有名为post 的表和名为status 的列status,数据为publishedpending。现在我想使用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')
    ;
}

但查询没有返回任何内容。

【问题讨论】:

  • 您的尝试有什么问题(除了您设置的参数多于查询中使用的参数)?
  • 是symfony2还是symfony3?您的标题和标签不匹配。
  • 此代码返回Query 对象。您是否尝试执行查询?同样在 SQL 和 DQL 中,相等运算符是 = 而不是 ==
  • 是的,我错过了执行部分,谢谢,我会尝试。

标签: php sqlite symfony doctrine-orm doctrine


【解决方案1】:

您的代码中存在一些错误/问题

  • 提供的参数数量与预期数量不匹配
  • 您没有调用 getResult(或任何其他类似执行的方法),因此您实际上返回了 Query 对象
  • 我会更改方法的命名,因为它具有误导性

我也会改变

  • 您可能希望以某种方式限制结果数量
  • 如果您在实体存储库中(在本例中为 Post),则在使用 querybuilder 时可以省略使用 selectfrom

我的提议:

/**
 * @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();
}

希望对你有帮助

【讨论】:

    【解决方案2】:

    试试这个

     $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-select-examples

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多