2012-11-15 34 views
0

如果我得到這個:查詢建築使用的Kohana查詢生成器

$result = 
    DB::select(
    'orders.date_created' 
    ) 
    ->from('orders') 
    ->execute()->as_array(); 

對於正常,dsiplaying DATE_CREATED所有訂單。 ?現在我可以通過用戶進行篩選,這樣做user_id說明= 112

這將讓我有這樣的:

if(isset($get['user_id'])) 
    { 
     $result = 
     DB::select(
     'orders.date_created' 
     ) 
     ->from('orders') 
        ->where('user_id', '=', $get['user_id']) 
     ->execute()->as_array(); 
    }else{ 
     $result = 
     DB::select(
     'orders.date_created' 
     ) 
     ->from('orders') 
     ->execute()->as_array(); 
    } 

雖然這對我來說是有這個沒問題,但是這得是真正的多醜陋的代碼當我有4個PARAMS從過濾掉(4,語句)如?USER_ID = 112 &數量= 2 & ......

我可以以某種方式使一個內聯如果/ action語句,這將抓住所有user_ids如果有什麼在$ get ['user_id']?

所以我最終只有這樣的:

 $result = 
     DB::select(
     'orders.date_created' 
     ) 
     ->from('orders') 
        ->where('user_id', '=', (isset($get['user_id']) ? $get['user_id'] : 'GRAB ALL!')) 
     ->execute()->as_array(); 

或者是有另一種更好的方法來做到這一點?

試圖尋找在Kohana的文檔,如果有一些 - >如果() - >其中() - > exitif()..執行前(只是它如何工作的一些想象力)

回答

1

您可以修改查詢對象:

$query = DB::select()->from(...); 
if (isset($get['user_id'])) { 
    $query->where('user_id', '=', intval($get['user_id'])); 
} 
if (isset($get['quantity'])) { 
    $query->where('quantity', '=', floatval($get['quantity'])); 
} 
$result = $query->execute()->as_array();