使用Kohana Query Builder查询构建

时间:2012-11-15 12:40:10

标签: php mysql kohana kohana-3 query-builder

如果我得到了这个:

    $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个参数来过滤掉(4 where where语句)时,这会变得非常难看,例如?user_id = 112&amp; quantity = 2&amp; ... < / p>

我可以以某种方式创建内联if / action语句,如果$ get ['user_id']中没有任何内容,它会获取所有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文档是否有一些 - &gt; if() - &gt; where() - &gt; exitif()..(只是想象一下它是如何工作的)

1 个答案:

答案 0 :(得分:1)

您可以在执行之前修改Query对象:

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