jrk/levenshtein-bundle

为 symfony2 和 doctrine 的 Levenshtein 函数包

安装量: 44,738

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 3

开放问题: 0

类型:symfony-bundle

v1.1.1 2018-05-21 16:49 UTC

This package is auto-updated.

Last update: 2024-09-04 05:29:49 UTC


README

配置

JrkLevenshteinBundle 需要 Symfony 和 Doctrine

  • 使用 composer

将 jrk/levenshtein-bundle 添加为项目 composer.json 文件中的依赖项

{
    "require": {
        "jrk/levenshtein-bundle": "dev-master"
    }
}

更新 composer

php composer update
or 
php composer.phar update
  • 将 JrkLevenshteinBundle 添加到应用内核中
<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Jrk\LevenshteinBundle\JrkLevenshteinBundle(),
    );
}
  • Yml 配置
# app/config/config.yml
doctrine:
    orm:
        entity_managers:
            default:
                dql:
                    numeric_functions:
                        levenshtein: Jrk\LevenshteinBundle\ORM\Doctrine\DQL\LevenshteinFunction
                        levenshtein_ratio: Jrk\LevenshteinBundle\ORM\Doctrine\DQL\LevenshteinRatioFunction

或者如果您使用的是简短配置而非完整配置

#app/config/config.yml
doctrine:
    orm:
        # if you have these lines
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        # you've to directly put the dql lines, see below
        dql:
            numeric_functions:
                levenshtein: Jrk\LevenshteinBundle\ORM\Doctrine\DQL\LevenshteinFunction
                levenshtein_ratio: Jrk\LevenshteinBundle\ORM\Doctrine\DQL\LevenshteinRatioFunction
  • 控制台使用

安装函数

php app/console jrk:levenshtein:install

该控制台行将在您的数据库中安装 2 个函数。您可以通过在 phpmyadmin sql 提示符或您喜欢的 mysql 客户端中输入来检查这些函数

SHOW FUNCTION STATUS;

用法

  • 使用 QueryBuilder
<?php
    public function getUserByFirstname($tolerance = 3) {
        $queryBuilder = $this->_em->createQueryBuilder()
           ->select('user')
           ->from('FooBundle:User','user')
           ->where('LEVENSHTEIN(user.firstname,:searchString) <= :tolerance')
           ->setParameter('searchString',$searchString)
           ->setParameter('tolerance',$tolerance)
        ;

        return $queryBuilder->getQuery()->getResult();
    }
?>
  • 使用 DQL
<?php
    public function getUserByFirstname($tolerance = 3) {

        $dqlString = '
            SELECT user
            FROM FooBundle:User user
            WHERE LEVENSHTEIN(user.firstname,:searchString) <= :tolerance
        ';

        $query = $this->_em->createQuery($dqlString)
           ->setParameter('searchString',$searchString)
           ->setParameter('tolerance',$tolerance)
        ;

        return $query->getResult();
    }
?>