MySQL Doctrine 和LIKE query
在MySQL中,LIKE查询是一种基于模式匹配的查询方法,它可以让我们查找包含指定模式内容的数据记录。
在Doctrine ORM中,在构建查询时,我们可以使用LIKE关键字来实现模糊查询,以下是一个示例:
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from('User', 'u')
->where($qb->expr()->like('u.name', ':name'))
->setParameter('name', '%John%');
上述代码将从User实体中选取名字中包含“John”的用户记录。
但是,在使用LIKE查询时,我们需要注意以下几点:
阅读更多:MySQL 教程
Wildcard字符
在模糊查询中,我们可以使用通配符字符来表示任意数量的字符,包括:
- 百分号(%):表示零个或多个字符
- 下划线(_):表示单个字符
以下是示例:
- 包含“a”的所有单词:
SELECT * FROM words WHERE word LIKE '%a%' - 以“ab”开头的所有单词:
SELECT * FROM words WHERE word LIKE 'ab%' - 以“ab”结尾的所有单词:
SELECT * FROM words WHERE word LIKE '%ab' - 第三个字符为“a”:
SELECT * FROM words WHERE word LIKE '__a%'
模式转义
如果我们要匹配包含通配符字符本身的文本,我们需要使用反斜杠字符进行转义。例如,我们要查找包含百分号字符的记录,可以这样写:
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from('User', 'u')
->where($qb->expr()->like('u.name', ':name'))
->setParameter('name', '%\%%');
总结
使用LIKE查询可以让我们进行模糊匹配,但是需要注意通配符字符和模式转义的使用方法。在Doctrine ORM中,我们可以通过expr()方法来使用LIKE查询。
极客笔记