2010-11-08 68 views
0

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

$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中的文件指出,正则表达式()的工作方式相同像(),但它不是。这工作得很好:

$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(); 
+0

这应该工作。你可以举一个你正在传递的'$ searchArray [$ i]'值的例子吗? – netcoder 2010-11-08 20:41:34

+0

一个例子是任何类型的字符串。 “棕色鞋”,“皮革外套”等。数据库中的“prod_name”字段是文本。我也尝试使用我正在搜索的实际文本,而不是像这样的变量:“^ shoe $”。仍然不起作用。 – anthony 2010-11-10 19:59:16

回答

0

通过一些进一步的研究,试验&错误,我找到了答案。 Kohana的数据库方法不是使用普通的正则表达式,而是使用MySql的版本。在我的情况,我在寻找一个词组的话,并会使用以下(我使用“鞋”作为我的例子)

[[:<:]]shoe 

会发现,与鞋开头的单词

shoe[[:>:]] 

会发现,与靴端的话

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

那只发现是鞋

代码,电子字为我工作的是:

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

希望这可以帮助别人。