Symfony2 / Doctrine 查询生成器或 DQL - 使用 LIKE 语句时首选哪种方式?

发布于 2025-01-05 18:41:03 字数 825 浏览 0 评论 0原文

我正在尝试使用 LIKE 语句创建查询。下面的两个例子都有效,但是哪一个是更好的方法呢?有没有一种比另一种更安全?或者说,表现更好?符合最佳实践的一个?还有别的事吗?只是想知道......另外,也许有一种完全不同的方式来执行我不知道的 LIKE 操作?

示例 1:

 $em = $this->getDoctrine()->getEntityManager();
 $query = $em->createQuery(
     'SELECT u.user1lname FROM MySiteMyBundle:User u WHERE u.user1lname LIKE :searchTerm ORDER BY u.user1lname ASC'
     )->setParameter('searchTerm', $searchTerm.'%');

$result = $query->getResult();

示例 2:

$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder();
$result = $qb->select('n.user1lname')->from('MySite\MyBundle\Entity\User', 'n')
    ->where($qb->expr()->like('n.user1lname', $qb->expr()->literal($searchTerm.'%')))
    ->getQuery()
    ->getResult();

I'm trying to create a query using the LIKE statement. Both examples below work however which one is the better way to go? Is there one that is more secure than the other? Or, performs better? One that conforms to a best practice? Something else? Just wondering here... Also, perhaps there is a totally different way to perform the LIKE operation that I'm unaware of?

Example 1:

 $em = $this->getDoctrine()->getEntityManager();
 $query = $em->createQuery(
     'SELECT u.user1lname FROM MySiteMyBundle:User u WHERE u.user1lname LIKE :searchTerm ORDER BY u.user1lname ASC'
     )->setParameter('searchTerm', $searchTerm.'%');

$result = $query->getResult();

Example 2:

$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder();
$result = $qb->select('n.user1lname')->from('MySite\MyBundle\Entity\User', 'n')
    ->where($qb->expr()->like('n.user1lname', $qb->expr()->literal($searchTerm.'%')))
    ->getQuery()
    ->getResult();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我喜欢麦丽素 2025-01-12 18:41:03

没有区别。

查询构建器所做的就是创建 DQL,然后将其传递。
尝试看看:
die($qb->getDQL());

我使用查询生成器是因为我发现它比构建字符串更容易,并且您可以共享查询的部分内容。但最终的结果将是一样的。

No difference.

All query builder does is to create DQL which is then passed on.
Try looking at:
die($qb->getDQL());

I use query builder because I find it easier than building strings and you can share parts of the query. But the end results will be the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文