解决laravel用clickhouse查询出现“Missing columns”问题

广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买

解决laravel用clickhouse查询出现“Missing columns”问题

下面由Laravel教程栏目给大家介绍关于在laravel中使用clickhouse查询引起的“DB::Exception: Missing columns”问题,希望对大家有所帮助!

使用 clickhouse 尤其注意:不能这么写!

   $where = [];    if($cookieId) {        $where['cookie_id'] = $cookieId;    }            if($host) {        $where['host'] = $host;    }            if($uri) {        $where['uri'] = $uri;    }    $builder = DB::connection('clickhouse')        ->table((new AccessLogs)->getTable())        ->where($where);    if(!empty($startTime)) {        $builder->where('create_time', '>=', $startTime);    }    if(!empty($endTime)) {        $builder->where('create_time', '<=', $endTime);    }
登录后复制

当多个条件查询时,$where 数组在 sql 中会被当成一个字段,从而导致 DB:: Exception: Missing columns: ‘2022-09-27 13:00:49’ ‘2022-09-27 16:00:49’ while processing query 的错误。

这样优化:

   $builder = DB::connection('clickhouse')        ->table((new AccessLogs)->getTable());    if(!empty($cookieId)) {        $builder->where('cookie_id', $cookieId);    }            if(!empty($host)) {        $builder->where('host', $host);    }            if(!empty($uri)) {        $builder->where('uri', $uri);    }    if(!empty($startTime)) {        $builder->where('create_time', '>=', $startTime);    }    if(!empty($endTime)) {        $builder->where('create_time', '<=', $endTime);    }
登录后复制

才能正确查询。

多提一句:在命令行查询时,参数值使用单引号,使用双引号时,参数值也会被当成一个字段:

正确操作是:

select * from access_log where create_time >= ‘2022-09-27 13:00:49’ and create_time <= ‘2022-09-27 16:00:49’ order by create_time desc limit 10;
登录后复制

以上就是解决laravel用clickhouse查询出现“Missing columns”问题的详细内容,更多请关注9543建站博客其它相关文章!

广告:SSL证书一年128.66元起,点击购买~~~

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:PHP8.1新特性大讲解之使用字符串键解包数组
下一篇:数据库索引优化实践:PHP编程中的应用

发表评论

关闭广告
关闭广告