Я использую phalcon с mongo db. Модель – это коллекция . Я хочу использовать find для получения
SELECT * FROM Users WHERE Username LIKE '%TienNguyen%'
Я вижу в mongo db запрос
b.users.find( { Username: /TienNguyen/ } )
Но в коллекции Фалкона. Как это сделать?
Я попробовал Users::find([['Username' => "/TienNguyen/"]]);
Это не работает.
пожалуйста, помогите мне
Как уже упоминалось выше, поиски регулярных выражений, которые не привязаны к началу строки, могут быть очень дорогими, поскольку они требуют полного сканирования таблицы. В зависимости от вашего варианта использования вы можете вместо этого использовать текстовый индекс . Он обеспечивает поддержку беззаботного поиска без привязки, включая суффикс.
Да, то, что вы хотели, это форма оператора $ regex, вместо того, чтобы передавать в regex
в виде строки. Хотя эта форма работает в оболочке, большинство драйверов более счастливы с синтаксисом оператора:
Users::find([[ 'Username' => [ '$regex' => 'TienNguyen' ] ]])
Будьте осторожны с использованием $ regex, как показывает страница. Вы можете испортить производительность, если вы не ищете из * начала * строки, как в "^TienNguyen"
используя оператор каретки.
Для справки просто JSON декодирует любую стандартную форму аргумента из руководства Mongo, чтобы получить эквивалентную вам структуру для большинства встроенных функций драйвера.
Вы могли бы сделать что-то вроде:
$Users = \Users::query() ->where(name LIKE :name:) ->bind(array('name' => '%' . $name . '%')) ->execute();
Попробуйте:
Users::find([['Username' => new MongoRegex("/TienNguyen/")]]);
Удачи!
Найден решение
$objs = Items::find( [ [ 'title' => [ '$regex' => $query, '$options' => 'i' ] ] ] );