我无法在phalcon的集合中查询%like

时间:2014-02-23 17:29:53

标签: php mongodb mongodb-query phalcon

我将phalcon与mongo db一起使用。模型是集合。 我想用find来获取

SELECT * FROM Users WHERE Username LIKE '%TienNguyen%'

我在mongo db中看到有查询

b.users.find(
      { Username: /TienNguyen/ }
)

但在收集Phalcon时。我该如何编码呢。

我试过Users::find([['Username' => "/TienNguyen/"]]); 它不起作用。

请帮帮我

5 个答案:

答案 0 :(得分:5)

是的,您想要的是$regex运算符表单,而不是将regex作为字符串传递。虽然该表单在shell中有效,但大多数驱动程序对操作符语法更为满意:

Users::find([[ 'Username' => [ '$regex' => 'TienNguyen' ] ]])

如页面所示,非常小心使用 $ regex 。如果您没有使用插入符操作符在"^TienNguyen"中搜索字符串的* start *,则可能会破坏性能。

作为参考,只需JSON解码Mongo手册中的任何标准参数形式,即可获得大多数本机驱动程序函数的语言等效结构。

答案 1 :(得分:2)

找到解决方案

 $objs = Items::find(
        [
            [                    
                'title' => [
                    '$regex' => $query,
                    '$options' => 'i'
                ]
            ]               
        ]
    );

答案 2 :(得分:1)

如上所述,未锚定在字符串开头的正则表达式搜索可能非常昂贵,因为它们需要全表扫描。根据您的使用情况,您可以考虑使用text index。它为不区分大小写的非锚定搜索提供支持,包括后缀词干。

答案 3 :(得分:0)

您可以执行以下操作:

$Users = \Users::query()
            ->where(name LIKE :name:)
            ->bind(array('name' => '%' . $name . '%'))
            ->execute();

答案 4 :(得分:0)

请尝试一下:

Users::find([['Username' => new MongoRegex("/TienNguyen/")]]);

祝你好运!