【问题标题】:SQLbuilder LIKE parameters with %带有 % 的 SQLbuilder LIKE 参数
【发布时间】:2014-05-20 11:01:24
【问题描述】:

我正在尝试使用 LIKE 在我的数据库中搜索,现在构建器运行良好,除了 1 件事: 我想在每个参数的前面和后面都有一个%,但是构建器的工作方式是在执行时在每个参数的前面和后面放置一个'。所以我不能手动添加它们

有没有办法做到这一点?

这是查询:

$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'%) 但我想要% 之间的'

如果有人知道怎么做

【问题讨论】:

标签: mysql sql query-builder doctrine-query


【解决方案1】:

正如@VMAI 所说,这解决了我的问题

    for($i=0; $i < sizeof($tags); $i++){
        $queryBuilder->andWhere($queryBuilder->expr()->like('k.key', $queryBuilder->expr()->literal('%' . $tags[$i] . '%')));
    }

【讨论】:

    【解决方案2】:

    直接将其添加到参数中:

    $queryBuilder->andWhere('k.key LIKE ' . $queryBuilder->createPositionalParameter('%' . tags[$i] . '%'));
    

    应该在 qoutes 之间的所有“事物”都必须添加到那里

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多