在Idiorm和Paris中通过正则表达式匹配选择行

时间:2015-09-04 13:42:05

标签: php model idiorm

我正在寻找以下在Idiorm和巴黎的SQL等价物:

SELECT * FROM table WHERE (regex=0 AND col=_match_) OR (regex=1 AND _match_ REGEXP col)
LIMIT 1

关注Idiorm&巴黎声明仅匹配col=_match_

Idiorm:

$row = ORM::for_table('table')
->where_equal('col', '_match_')
->find_one()

巴黎:

MyModel::where('col', '_match_')->find_one()

2 个答案:

答案 0 :(得分:3)

句子where_any是解决方法 示例:

$myModel = ORM::for_table('table')
        ->where_any_is(array(
            array('regex'=> 0,'col' => 'match'),
            array('regex'=> 1,'col' => '_match_')))
        ->limit(1)->find_many();

请参阅过滤查询的文档:https://idiorm.readthedocs.org/en/latest/querying.html#filtering-results

答案 1 :(得分:1)

阅读文档和代码后,似乎Idiorm / Paris不支持该功能。所以,我们有两个选择:

  1. 使用where_raw()方法,通过这种方式,我们将where子句作为字符串直接传递给Idiorm。

  2. 通过设置where_condition()向Idiorm ORM类添加一个新方法,将$ value与$ column_name匹配,否则,条件(将$ column_name与$ value匹配)是正常的)。

    $reverse = true