2016-07-04 1 views
0

Как выполнить этот запрос с помощью ОРМ в fuelPHP:FuelPHP ОРМ множественным И, ИЛИ запрос

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 
       ));) 

Есть ли способ сделать это?

Спасибо в пожилом

ответ

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(); 
0

Вы также можете использовать его таким образом или взглянуть на эту ссылку для большего количества света
Query builder Where - Classes FuelPHP documentation

//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(); 
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