如果我得到这个:
$result =
DB::select(
'orders.date_created'
)
->from('orders')
->execute()->as_array();
正常情况下,显示创建日期的所有订单。现在我可以按用户进行过滤,执行此操作?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()..(只是对其如何工作的一些想象)
最佳答案
您可以在执行之前修改查询对象:
$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();
关于php - 使用 Kohana Query Builder 构建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397715/