Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Phpclickhouse Laravel Package

smi2/phpclickhouse

PHP client for ClickHouse with an easy, fluent API. Supports queries and inserts, result sets, bindings, and connection configuration for fast analytics workflows. Suitable for Laravel and standalone PHP apps needing reliable ClickHouse access.

View on GitHub
Deep Wiki
Context7

layout: default title: Quick Start & Basics

< Back to Home

Quick Start & Basics

Connection

$config = [
    'host'     => '192.168.1.1',
    'port'     => '8123',
    'username' => 'default',
    'password' => '',
    'https'    => true,
];

$db = new ClickHouseDB\Client($config);
$db->database('default');
$db->setTimeout(10);       // seconds
$db->setConnectTimeOut(5); // seconds
$db->ping(true);           // throws exception on failure

Connection without port

$config['host'] = 'blabla.com';
$config['port'] = 0;
// getUri() === 'http://blabla.com'

$config['host'] = 'blabla.com/urls';
$config['port'] = 8765;
// getUri() === 'http://blabla.com/urls'

$config['host'] = 'blabla.com:2224';
$config['port'] = 1234;
// getUri() === 'http://blabla.com:2224'

ReadOnly user

$config = [
    'host'     => '192.168.1.20',
    'port'     => '8123',
    'username' => 'ro',
    'password' => 'ro',
    'readonly' => true,
];

Show tables

print_r($db->showTables());

Create table

$db->write('
    CREATE TABLE IF NOT EXISTS summing_url_views (
        event_date Date DEFAULT toDate(event_time),
        event_time DateTime,
        site_id Int32,
        site_key String,
        views Int32,
        v_00 Int32,
        v_55 Int32
    )
    ENGINE = SummingMergeTree(event_date, (site_id, site_key, event_time, event_date), 8192)
');

Show create table

echo $db->showCreateTable('summing_url_views');

Insert data

$stat = $db->insert('summing_url_views',
    [
        [time(), 'HASH1', 2345, 22, 20, 2],
        [time(), 'HASH2', 2345, 12, 9,  3],
        [time(), 'HASH3', 5345, 33, 33, 0],
        [time(), 'HASH3', 5345, 55, 0, 55],
    ],
    ['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55']
);

UInt64 values

use ClickHouseDB\Type\UInt64;

$statement = $db->insert('table_name',
    [
        [time(), UInt64::fromString('18446744073709551615')],
    ],
    ['event_time', 'uint64_type_column']
);

Insert Assoc Bulk

$oneRow = [
    'one' => 1,
    'two' => 2,
    'thr' => 3,
];
$failRow = [
    'two' => 2,
    'one' => 1,
    'thr' => 3,
];

$db->insertAssocBulk([$oneRow, $oneRow, $failRow]);

Array as column

$db->write('
    CREATE TABLE IF NOT EXISTS arrays_test_string (
        s_key String,
        s_arr Array(String)
    )
    ENGINE = Memory
');

$db->insert('arrays_test_string',
    [
        ['HASH1', ["a", "dddd", "xxx"]],
        ['HASH1', ["b'\tx"]],
    ],
    ['s_key', 's_arr']
);

FormatLine helper

// CSV format
var_dump(ClickHouseDB\Quote\FormatLine::CSV(['HASH1', ["a", "dddd", "xxx"]]));

// TSV format
var_dump(ClickHouseDB\Quote\FormatLine::TSV(['HASH1', ["a", "dddd", "xxx"]]));

// Write to file
$row = ['event_time' => date('Y-m-d H:i:s'), 'arr1' => [1,2,3], 'arrs' => ["A", "B\nD\nC"]];
file_put_contents($fileName, ClickHouseDB\Quote\FormatLine::TSV($row) . "\n", FILE_APPEND);

Select

$statement = $db->select('SELECT * FROM summing_url_views LIMIT 2');

Statement API

$statement->count();          // select row count
$statement->countAll();       // total row count
$statement->fetchOne();       // first row
$statement->extremesMin();    // extremes min
$statement->totals();         // totals row
$statement->rows();           // all rows
$statement->totalTimeRequest(); // time
$statement->rawData();        // raw JSON decoded array
$statement->responseInfo();   // raw curl_info
$statement->info();           // human-readable size info

// Statistics (clickhouse-server >= 54011)
$db->settings()->set('output_format_write_statistics', true);
print_r($statement->statistics());

Iterator

$state = $db->select('SELECT (number+1) as nnums FROM system.numbers LIMIT 5');
foreach ($state as $key => $value) {
    echo $value['nnums'];
}

Result as tree

$statement = $db->select('
    SELECT event_date, site_key, sum(views), avg(views)
    FROM summing_url_views
    WHERE site_id < 3333
    GROUP BY event_date, site_key
    WITH TOTALS
');

print_r($statement->rowsAsTree('event_date.site_key'));

/*
[2016-07-18] => [
    [HASH2] => [event_date => 2016-07-18, site_key => HASH2, sum(views) => 12, avg(views) => 12],
    [HASH1] => [event_date => 2016-07-18, site_key => HASH1, sum(views) => 22, avg(views) => 22],
]
*/

Drop table

$db->write('DROP TABLE IF EXISTS summing_url_views');

Check existence

$db->isExists($database, $table);
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor
spatie/laravel-javascript-views