【问题标题】:Trying to understand Doctrine Criteria() and if caching is possible试图理解 Doctrine Criteria() 以及是否可以缓存
【发布时间】:2015-01-19 11:34:46
【问题描述】:

我需要写一个简单的查询:SELECT propertyName from TABLE_NAME WHERE abc > 10

我相信我不能用简单的 $repository->findBy() 来做到这一点,所以相信 DQL(或查询构建器)会完成这项工作。像这样的:

$query = $this->createQueryBuilder('x')
      ->where('x.abc > :amt')
      ->setParameter('amt', 10)
      ->getQuery();

$query->getResult();

但是,我听说 Doctrine 2.3 中提供的 Doctrine "Criteria" 是一种更好的方法。

(1) 我看到的文档很少,但 DQL 仍然得到了最多的推广。谁能给我一个非常简单的代码示例,与我上面的相同(但使用标准)?

(2) 缓存呢?我知道我可以使用 DQL 做到这一点,但是 Criteria 呢?

$query->useResultCache('cache_id');

【问题讨论】:

    标签: symfony doctrine-orm doctrine


    【解决方案1】:

    From the docs:

    标准的匹配语言有限,适用于 SQL 和 PHP 集合级别。这意味着您可以使用集合 可互换匹配,独立于内存或 sql 支持 收藏。

    另一个有趣的答案可能是: How to use a findBy method with comparative criteria

    顺便说一句,我认为缓存仅取决于 Query 对象本身和 Doctrine 层,因此 Criteria 仅用于编写自定义选择或匹配机制。

    因此,您可以以最优雅的形式编写查询:

        $qb = $this->createQueryBuilder('x'); 
        $query = $qb
            ->where($qb->expr()->gt("x.abc",":amt"))
            ->setParameter('amt', 10)
            ->getQuery();
    

    希望有帮助

    我用它直接在集合关系中查询。

    仅作为示例,这就是我使用 Doctrine Criteria 的方式:

    class User implements AdvancedUserInterface
    {
    
      ....
    
        /**
         * One-To-Many
         *
         * @ORM\OneToMany(targetEntity="Acme\ADemoBundle\Entity\Transaction", mappedBy="user")
         * @ORM\OrderBy({"position" = "ASC"})
         */
        protected $transactions;
    
        public function getLastTransaction()
        {
            $criteria = Criteria::create()
                            ->orderBy(array('eventAt'=>'DESC'))
                            ->setFirstResult(0)
                            ->setMaxResults(1);
    
            return $this->transactions->matching($criteria)->first();
        }
     }
    

    【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多