【问题标题】:How to set OR condition in Phalcon PHP ORM?如何在 Phalcon PHP ORM 中设置 OR 条件?
【发布时间】:2014-02-26 16:54:24
【问题描述】:

我使用 Phalcon PHP 作为 PHP MVC 框架和 MongoDB。 我可以根据一些标准找到对象:

$user = User::findFirst(array(array('username' => $login, 'email'=> $login)));

如您所见,此请求将根据条件之间的逻辑AND 运算符向我返回记录。我需要根据条件之间的OR运算符形成返回结果的请求。

问题还在于我使用的是 MongoDB,所以,我可以假设,我不能手动编写 PHQL 请求。

【问题讨论】:

    标签: php mongodb phalcon


    【解决方案1】:

    只是修改 PHP 数组的问题

    $user = User::findFirst( array( 
        '$or' => array(
            array( 'username' => $login),
            array( 'email' => $login)
        )
     ));
    

    所以我不仅展示了答案,还展示了我的非 PHP 思维如何解决这个问题:

    $result = '{ "$or": [ { "username": "login" }, { "email": "login" } ] }';
    echo var_dump( json_decode( $result ) );
    
    $test = array( 
        '$or' => array(
             array( 'username' => 'login'), array( 'email' => 'login')
         )
    );
    
    echo json_encode( $test ) ."\n"
    

    所以我们只用了几行代码就转换并证明了。因此,既然您从手册页或阅读 SO 上的另一个问题知道 JSON,只需转换它。这也是我在此处提交有效 JSON 响应的原因之一,以便逻辑可以翻译成几乎任何语言实现。

    【讨论】:

      【解决方案2】:

      您可以在第一个参数中将列名作为字符串传递:

      $user = User::findFirst('username = "'.$login.'" OR email = "'.$login.'"');
      

      【讨论】:

      • 不是问题所在
      【解决方案3】:
      $result = '{ "$or": [ { "username": "login" }, { "email": "login" } ] }';
      User::findFirst(array(json_decode($query,true)));
      

      $result 是可用于在 mongodb 命令行中触发查询的确切 json

      第二个参数为true的json_decode会输出JSON的数组样式格式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多