【问题标题】:Query building using Kohana Query Builder使用 Kohana Query Builder 构建查询
【发布时间】:2012-11-15 12:40:10
【问题描述】:

如果我得到这个:

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

正常情况下,显示所有订单 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 语句)中过滤掉时,这会变成非常丑陋的代码,例如 ?user_id=112&quantity=2&...

我能否以某种方式制作一个内联 if/action 语句,如果 $get['user_id'] 中没有任何内容,它将获取所有 user_ids 吗?

所以我最终只能得到这个:

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

或者还有其他更好的方法吗?

尝试查看 Kohana 文档是否有 ->if()->where()->exitif()..(只是对它如何工作的一些想象)

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2019-04-19
      • 2015-05-12
      相关资源
      最近更新 更多