次のコラム Laravel チュートリアル では、laravel でクリックハウスクエリを使用することで発生する「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' クエリの処理中にエラーが発生しました。
次のように最適化します:
$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); }
は正しくクエリを実行できます。
もう 1 つ言及しておきたい点: コマンド ラインでクエリを実行する場合は、パラメーター値に一重引用符を使用します。二重引用符を使用すると、パラメーター値もフィールドとして扱われます:
#正しい操作は次のとおりです:
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がクリックハウスクエリを使用する場合の「列が見つからない」問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。