Rumah  >  Artikel  >  rangka kerja php  >  Selesaikan masalah "Lajur tiada" apabila laravel menggunakan pertanyaan clickhouse

Selesaikan masalah "Lajur tiada" apabila laravel menggunakan pertanyaan clickhouse

藏色散人
藏色散人ke hadapan
2022-10-31 16:00:313183semak imbas

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(&#39;create_time&#39;, &#39;<=&#39;, $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(&#39;clickhouse&#39;)
        ->table((new AccessLogs)->getTable());
    if(!empty($cookieId)) {
        $builder->where(&#39;cookie_id&#39;, $cookieId);
    }        
    if(!empty($host)) {
        $builder->where(&#39;host&#39;, $host);
    }        
    if(!empty($uri)) {
        $builder->where(&#39;uri&#39;, $uri);
    }
    if(!empty($startTime)) {
        $builder->where(&#39;create_time&#39;, &#39;>=&#39;, $startTime);
    }
    if(!empty($endTime)) {
        $builder->where(&#39;create_time&#39;, &#39;<=&#39;, $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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam