Maison  >  Article  >  cadre php  >  Résoudre le problème des "colonnes manquantes" lorsque Laravel utilise la requête Clickhouse

Résoudre le problème des "colonnes manquantes" lorsque Laravel utilise la requête Clickhouse

藏色散人
藏色散人avant
2022-10-31 16:00:313037parcourir

La colonne suivante du Tutoriel Laravel vous présentera le problème "DB::Exception : Colonnes manquantes" causé par l'utilisation de la requête Clickhouse dans Laravel. J'espère que cela sera utile à tout le monde !

Faites particulièrement attention lorsque vous utilisez clickhouse  : n'écrivez pas comme ça !

   $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);
    }

Lors d'une requête avec plusieurs conditions, le tableau $where sera traité comme un champ dans SQL, ce qui entraînera DB::Exception : colonnes manquantes : '2022-09-27 13:00:49' '2022-09-27 16:00:49' lors du traitement de l'erreur de requête.

Optimisez comme ceci :

   $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);
    }

pour interroger correctement.

Encore une chose : lors d'une requête sur la ligne de commande, utilisez des guillemets simples pour les valeurs des paramètres. Lors de l'utilisation de guillemets doubles, la valeur du paramètre sera également traitée comme un champ :

L'opération correcte est :

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;
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer