Maison > cadre php > Laravel > le corps du texte

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

藏色散人
Libérer: 2022-10-31 16:00:31
avant
3194 Les gens l'ont consulté

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);
    }
Copier après la connexion

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);
    }
Copier après la connexion

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;
Copier après la connexion
.

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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal