/laravel-clickhouse

Eloquent model for ClickHouse

Primary LanguagePHP

Laravel Clickhouse

Build Status StyleCI Coverage Status

Package Rank Latest Stable Version Latest Unstable Version License composer.lock

Laravel Clickhouse - Eloquent model for ClickHouse.

  • Vendor: bavix
  • Package: Laravel Clickhouse
  • Version: Latest Stable Version
  • Laravel Version: 6.x, 7.x, 8.x
  • PHP Version: 7.2+
  • Composer: composer require bavix/laravel-clickhouse

⚠️ If you are using php 8 and the-tinderbox/clickhouse-* author hasn't added support yet, then connect mine.

composer req bavix/clickhouse-php-client

composer req bavix/clickhouse-builder

Get started

$ composer require bavix/laravel-clickhouse

Then add the code above into your config/app.php file providers section

Bavix\LaravelClickHouse\ClickHouseServiceProvider::class,

And add new connection into your config/database.php file. Something like this:

'connections' => [
    'bavix::clickhouse' => [
        'driver' => 'bavix::clickhouse',
        'host' => '',
        'port' => '',
        'database' => '',
        'username' => '',
        'password' => '',
        'options' => [
            'timeout' => 10,
            'protocol' => 'https'
        ]
    ]
]

Or like this, if clickhouse runs in cluster

'connections' => [
    'bavix::clickhouse' => [
        'driver' => 'bavix::clickhouse',
        'servers' => [
            [
                'host' => 'ch-00.domain.com',
                'port' => '',
                'database' => '',
                'username' => '',
                'password' => '',
                'options' => [
                    'timeout' => 10,
                    'protocol' => 'https'
                ]
            ],
            [
                'host' => 'ch-01.domain.com',
                'port' => '',
                'database' => '',
                'username' => '',
                'password' => '',
                'options' => [
                    'timeout' => 10,
                    'protocol' => 'https'
                ]
            ]
        ]
    ]
],

Then create model

<?php

use Bavix\LaravelClickHouse\Database\Eloquent\Model;

class Payment extends Model
{
    protected $table = 'payments';
}

And use it

Payment::select(raw('count() AS cnt'), 'payment_system')
    ->whereBetween('payed_at', [
        Carbon\Carbon::parse('2017-01-01'),
        now(),
    ])
    ->groupBy('payment_system')
    ->get();

Supported by

Supported by JetBrains