php - 优先考虑存储库中的 MySQL SELECT/LIKE 结果

标签 php mysql symfony doctrine

我想创建一个查询来评估更精确的搜索词,例如搜索“Essen”应该返回 Essen,目前它返回 Evessen,因为这也是一个有效值。

我当前的功能:

public function findCities($city){

    $qb = $this->createQueryBuilder('z');

    $qb
        ->select('z')
        ->where($qb->expr()->like('z.city', ':city'))
        ->orderBy('z.code')
        ->setParameter('city', '%'.$city . '%');

    return $qb->getQuery()->getResult();
}

基于 THIS建议我创建了一个存储库函数:

public function findCities($city){

    $qb = $this->createQueryBuilder('z');

    $qb
        ->select('z')
        ->where($qb->expr()->like('z.city', ':city'))
        ->orderBy('INSTR(z.city, '.$city.'), z.city')
        ->setParameter('city', '%'.$city . '%');

    return $qb->getQuery()->getResult();
}

不幸的是,它返回 [Syntax Error] line 0, col 70: Error: Expected known function, got 'INSTR'

可能有任何其他方法(不返回数组,因为如果输出是数组,则函数需要大量更改,我想避免这种情况)?

最佳答案

DQL 中没有 INSTR 函数,这就是为什么会出现此错误 see docs

相反,您可以制作 NativeQuery see docs

像这样

$rsm = new \Doctrine\ORM\Query\ResultSetMapping();

$rsm->addEntityResult('City', 'c');

// for every selected field you should do this
$rsm->addFieldResult('c', 'id', 'id');
$rsm->addFieldResult('c', 'name', 'name');

$em = $this->getEntityManager()
    ->createNativeQuery('
        SELECT
          id, name
        FROM cities WHERE city LIKE '%:city%'
ORDER BY INSTR(city, ':city'), city',
        $rsm
    )->setParameter('city', $city);

return $em->getResult();

关于php - 优先考虑存储库中的 MySQL SELECT/LIKE 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275174/

相关文章:

关闭子窗口(弹出窗口)后Javascript刷新主页

php - mysql - 从现有时间戳创建索引小时列

javascript - 用于 Ext JS 的简单 REST API

php - 如何在 php 测试中使用模拟对象

php - 如何解决 Laravel 中检查数据库值/变量可用性的问题

mysql - 获取 2 个表中的最后 5 个帖子

javascript - Symfony2 + Doctrine + FormType,关系和动态添加行

java - 如何在Mac上更改MySQL的character_set_server

php - Symfony 从路由中删除前三个字符

eclipse - 无法让 Symfony2 Eclipse 插件工作