全球观天下!解决laravel用clickhouse查询出现“Missing columns”问题

时间:2022-10-31 15:59:53       来源:转载


(资料图)

下面由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”问题的详细内容,更多请关注php中文网其它相关文章!

关键词: 相关文章 给大家介绍 对大家有