我尝试使用LIKE
在我的数据库中搜索现在,除了一件事情之外,构建器工作得很好:
我希望在每个参数的前后都有一个%
,但是构建器的工作方式,它会在执行时在每个参数的前后放置一个'
。所以我无法手动添加它们
有办法做到这一点吗?
这是查询:
$queryBuilder = $this->db->createQueryBuilder();
$queryBuilder
->select('t.id', 't.status', 't.title', 't.price', 'u.username')
->from('tools', 't')
->innerJoin('t', 'key_for_tools', 'kft', 'kft.tools_id = t.id')
->innerJoin('t', 'keywords', 'k', 'kft.key_id = k.id')
->innerJoin('t', 'users', 'u', 't.user_id = u.id');
for($i=0; $i < sizeof($tags); $i++){
$queryBuilder->andWhere('k.key LIKE %' . $queryBuilder->createPositionalParameter($tags[$i]) . '%');
}
$result = $this->db->fetchAll($queryBuilder->getSql(),$tags);
但这会生成一个字符串,如:
SELECT t.id, t.status, t.title, t.price, u.username FROM tools t INNER JOIN key_for_tools kft ON kft.tools_id = t.id INNER JOIN keywords k ON kft.key_id = k.id INNER JOIN users u ON t.user_id = u.id WHERE (k.key LIKE %'tag'%)
但我想要%
'
如果有人知道该怎么做
答案 0 :(得分:0)
正如@VMAI所说,这解决了我的问题
for($i=0; $i < sizeof($tags); $i++){
$queryBuilder->andWhere($queryBuilder->expr()->like('k.key', $queryBuilder->expr()->literal('%' . $tags[$i] . '%')));
}
答案 1 :(得分:0)
将其直接添加到参数中,如:
$queryBuilder->andWhere('k.key LIKE ' . $queryBuilder->createPositionalParameter('%' . tags[$i] . '%'));
所有&#34;事物&#34;应该在qoutes之间,必须加在那里