如果我得到了这个:
$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()..(只是想象一下它是如何工作的)
答案 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();