0

如何在fuelPHP中使用orm执行这个查询?

SELECT * FROM user when a=1 and b=2 and (c=1 or d=2 or e=3) 

我不知道如何实现这个:and (c=1 or d=2 or e=3)

我被困在:

 $where = array()
 $where[] = array('a'=>1,'b'=>2);

 //Adding c,d,e column in $where[]
  I dont know how to combine AND and OR

     $query = Model_User::find('all', array(
                          'where' => $where
                  ));)

有没有办法做到这一点?

4

3 回答 3

0

您可以像这样使用 where_or :

$q = Model_User::find('all', array(
    'where' => array(
    array('a', 1),
        'and' => array(
            array('b', 2),
        ),
    ),
));

或者确实像这样(我发现选择时更容易阅读:

$q = Model_User::query();
$q->where('a', '=', 1);
$q->and_where('b', '=', 2);
$q->or_where_open();
  $q->where('c', '=', 1);
  $q->or_where('d', '=', 2);
  $q->or_where('e', '=', 3);
$q->or_where_close();
于 2016-07-04T08:25:34.463 回答
0

您也可以通过这种方式使用它,或者查看此链接以获得更轻松的
查询生成器 Where - Classes FuelPHP 文档

//this should be done within the model that you wish to deal with
$query = DB::select("*");
$query->from->("user");
$query->where("a","=","1");
$query->and_where("b","=","2");
$query->where(function($query){
$query->where("c","=","1");
$query->or_where("d","=","2");
$query->or_where("e","=","3");
});
$query->execute();
于 2016-07-20T12:52:06.780 回答
0

您可以链接,所以这更具可读性:

$q = Model_User::query()
     ->where('a', '=', 1)
     ->and_where('b', '=', 2)
     ->or_where_open()
        ->where('c', '=', 1)
        ->or_where('d', '=', 2)
        ->or_where('e', '=', 3)
   ->or_where_close();

如果您想使用 DB 查询来提高性能,但仍需要 ORM 模型对象作为结果,您可以使用 as_object(),请参阅http://fuelphp.com/docs/packages/orm/crud.html#/custom_sql

于 2016-09-16T10:22:27.680 回答