代码之家  ›  专栏  ›  技术社区  ›  anthony

Kohana 2.3.4 ORM和Regex数据库方法

  •  0
  • anthony  · 技术社区  · 14 年前

    我正试图使用Kohana的regex()数据库方法和ORM来搜索一个单词。我最初使用的是like()方法,但结果不是我想要的。基本上我需要做的是搜索一个词组来查找某个单词。我以前用过这样的基本正则表达式,但我肯定做错了。我试过以下方法,但没有成功:

    $prod_name = ORM::factory("product")->regex("prod_name", "^" . $searchArray[$i] . "$")->find_all();
    
    $prod_name = ORM::factory("product")->regex("prod_name", "/b" . $searchArray[$i] . "/b")->find_all();
    
    $prod_name = ORM::factory("product")->regex("prod_name", "/\b" . $searchArray[$i] . "\b/")->find_all();
    

    Kohana的文档说明regex()的工作原理与like()相同,但事实并非如此。这很管用:

    $prod_name = ORM::factory("product")->like("prod_name",$searchArray[$i])->find_all();
    

    同样地:

    $prod_name = ORM::factory("product")->like("prod_name",$searchArray[$i] . "%", FALSE)->find_all();
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   anthony    14 年前

    通过进一步的研究、反复试验,我找到了答案。Kohana的数据库方法不是使用普通的正则表达式,而是MySql的版本。在我的情况下,我在搜索短语中的单词,并使用以下内容(我使用“shoe”作为示例)

    [[:<:]]shoe
    

    会找到以鞋子开头的单词

    shoe[[:>:]]
    

    [[:<:]]shoe[[:>:]]
    

    只会找到鞋上的字

    最终为我工作的代码是:

    $prod_name = ORM::factory("product")->regex("prod_name", "[[:<:]]" . $searchArray[$i])->find_all();