Lajur Tutorial Laravel berikut akan memperkenalkan kepada anda masalah "DB::Exception: Missing columns" yang disebabkan oleh menggunakan pertanyaan clickhouse dalam laravel.
Berhati-hati apabila menggunakan clickhouse
: anda tidak boleh menulis seperti ini!
$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); }
Apabila membuat pertanyaan dengan berbilang syarat, tatasusunan $where akan dianggap sebagai medan dalam SQL, menghasilkan DB::Exception: Lajur tiada: '2022-09-27 13:00:49' '2022-09-27 16:00:49' semasa memproses ralat pertanyaan.
Optimumkan seperti ini:
$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); }
untuk membuat pertanyaan dengan betul.
Satu lagi perkara yang perlu dinyatakan: apabila membuat pertanyaan pada baris arahan, gunakan petikan tunggal untuk nilai parameter Apabila menggunakan petikan berganda, nilai parameter juga akan dianggap sebagai medan:
Operasi yang betul ialah:
Atas ialah kandungan terperinci Selesaikan masalah 'Lajur tiada' apabila laravel menggunakan pertanyaan clickhouse. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!