带有%的SQLbuilder LIKE参数

时间:2014-05-20 11:01:25

标签: mysql sql query-builder doctrine-query

我尝试使用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'%)但我想要%

之间的'

如果有人知道该怎么做

2 个答案:

答案 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之间,必须加在那里