php - 使用 Kohana Query Builder 构建查询

标签 php mysql kohana kohana-3 query-builder

如果我得到这个:

    $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/

相关文章:

php - 将 css 文件添加到 Kohana 模板

php - 获取用户选择的项目的 id?

c# - 这样的php系统要转成C#怎么办?

php - 比 CakePHP 中的 -1 递归手动连接更好的检索 HABTM、HasMany...等数据的方法?

javascript - 如何在AJAX响应中用新内容替换<td>和<div>的内容?

php - UTF-8贯穿始终

python - Django 应用程序在迁移到 heroku MySQL ClearDB 时抛出 MigrationSchemaMissing

php - 什么是缓存标记?

php - 发送 header 以下载 PDF 时,Safari 会附加 .html

php - 将变量插入 MySQL 插入语句的正确方法