Doctrine Query Language(DQL)-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录

在上节课我们说QueryBuilder创建的查询,最后都将转换为DQL语句进行查询,如果你对SQL语句非常熟悉,并且也对性能有一定的要求,你可以直接写DQL语句来进行查询。

我们在PostRepository类中添加一个DQL查询方法,这次我们使用DQL语句来对文章的标题进行模糊查询,PostRepository类的父类为我们提供了一个EntityManager对象。我们按着command键点击createtQueryBuilder()这个方法,_em就是PostRepository的父类,为我们提供的一个EntityManager对象,我们可以直接使用这个对象,来创建DQL查询,$this->_em->createQuery()参数就是DQL语句。

我们需要查询文章数据,SELECT p FROM App\Entity\Post,别名设置为p,查询条件WHERE p.title LIKE,关键字我们都用大写来写,下面是占位符参数,我们想对结果进行排序,输入ORDER BY p.id,这次我们使用降序DESC对结果进行排列。然后我们使用setParameter(),对占位符参数keyword,进行设置,它的值就是我们的参数$keywords。然后我们设置最大的结果数量为10。最后getResult()获取结果,将结果进行返回。

class PostRepository extends ServiceEntityRepository
{
    public function findByTitleDQL(string $keywords)
    {
        return $this->_em->createQuery('SELECT p FROM App\Entity\Post p WHERE p.title LIKE :keywords ORDER BY p.id DESC')
            ->setParameter('keywords', '%' . $keywords . '%')
            ->setMaxResults(10)
            ->getResult();
    }
}

回到测试代码,在第106行后面我们添加测试代码,关键字这次我们输入03,我们断言结果只有一条,并且结果的标题为Post title 03,执行测试代码,测试出错了,回看我们编写的查询方,参数这里我们没有使用百分号。我们添加百分号,再次执行测试代码,这次测试通过了。

如果你对SQL语法比较熟悉,推荐你使用DQL语句进行查询,这样可以更灵活一些,效率也更高一些。

如果你想学习更多的查询,请您查看doctrine的官方文档。

在项目开发的过程中,我们希望能够有一些临时数据来供我们使用,Symfony也提供了这样的组件。在下节课,我们将安装组件并且使用临时数据。

课程讨论

当前内容评论功能已关闭。