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.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle