【问题标题】:Select distinct results using findAll in doctrine在学说中使用 findAll 选择不同的结果
【发布时间】:2015-11-25 13:54:09
【问题描述】:

我可以使用findAll() 函数选择不同的值吗?

我正在尝试:

$province = $em->getRepository("FrontendBundle:Store")->findAll(array('distinct' => true));

但它似乎不起作用。

【问题讨论】:

  • 你能详细说明一下吗?您是否遇到某种错误?
  • 它不选择不同的。它继续选择所有结果。
  • 嗯,从技术上讲,它返回不同,因为每个商店实体都是不同的实体。但我知道这不是你的意思。为了应用 sql distinct,您必须进行自定义查询。 findAll 不会支持它。
  • findAll 方法不接受任何参数。它只是findBy(array()) 的别名。

标签: php symfony doctrine-orm doctrine


【解决方案1】:

findall 不支持这种行为,为了进行即时查询(在单独的存储库类中更好),您可以执行以下操作:

/** @var  $qb  \Doctrine\ORM\QueryBuilder*/
$qb = $em->getRepository("GerlaFrontendBundle:Store")->createQueryBuilder("p");

$province = $qb->select("p")
    ->distinct(true)
    ->getQuery()
    ->getResult();

希望有帮助

【讨论】:

  • 这是一个开始,但我怀疑他真的想从商店存储库中获得一份不同的省份列表。
【解决方案2】:
$province = $em->getRepository("FrontendBundle:Store")->findBy(array('distinct' => true));

也看到这个http://symfony.com/doc/current/book/doctrine.html#fetching-objects-from-the-database

一切顺利

【讨论】:

    【解决方案3】:

    如果您想使用 findAll() 并使其与众不同,请在 Entity Repository 文件中覆盖 findAll() 并将此方法添加到其中。

    public function findAll() {
       return $this->findBy(array(), array(array('distinct' => TRUE));
    }
    

    我主要用它来设置 findAll() 的顺序,但它也适用于 distinct。

    【讨论】:

    • 您的代码中有一对不匹配的括号。
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多