Skip to content

Latest commit

 

History

History
157 lines (111 loc) · 3.48 KB

README.md

File metadata and controls

157 lines (111 loc) · 3.48 KB

Laravel Clickhouse

An Eloquent model and Query builder with support for Clickhouse using the SeasClick extension.

⚠️ WARNING ⚠️

This package/repository is in active development, use at your own risk.

Requirements

SeasClick extension

Installation

You can install the package via composer:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/patoui/laravel-clickhouse"
        }
    ],
    "require": {
        "patoui/laravel-clickhouse": "dev-main"
    }
}

Add service provider

'providers' => [
    // Other Service Providers
    Patoui\LaravelClickhouse\LaravelClickhouseServiceProvider::class,
],

Add connection details

'connections' => [
    'clickhouse' => [
        'host'     => '127.0.0.1',
        'port'     => '9000',
        'username' => 'default',
        'password' => '',
    ]
],

Usage

Use as you normally would an eloquent model or query builder.

See tests directory for additional examples

Below is a list of currently untested methods or functionality. This does not mean that they won't work, just that there is currently no test coverage.

  • union
  • orWhere
  • JSON where clause ->where('meta->name', 'foobar')
  • whereJsonContains
  • whereJsonLength
  • whereBetween
  • whereNotBetween
  • whereDate, whereMonth, whereDay, whereYear, whereTime
  • orWhereColumn
  • whereExists
  • Subquery Where Clauses
  • Upserts
  • updateOrInsert
  • Updating JSON Columns ->update(['options->enabled' => true]);
  • increment or decrement
DB::connection('clickhouse')->insert(
    'analytics',
    ['ts' => time(), 'analytic_id' => mt_rand(1000, 9999), 'status' => mt_rand(200, 599)]
);
        
DB::connection('clickhouse')->table('analytics')->insert([
    'ts'          => time(),
    'analytic_id' => 321,
    'status'      => 204,
]);

DB::connection('clickhouse')
    ->table('analytics')
    ->where('ts', '>', strtotime('-1 day'))
    ->count();
    
class Analytic extends ClickhouseModel
{
    public $guarded = []; // optional, added for brevity
}

Analytic::create(['ts' => time(), 'analytic_id' => mt_rand(1000, 9999), 'status' => 204, 'name' => 'page_view']);

Analytic::where('ts', '>', strtotime('-1 day'))->count();

Analytic::where('name', 'page_view')->update(['name' => 'page_visit']);

Testing

Testing is done within docker to simplify setting up Clickhouse

docker-compose up --build

Run the tests:

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Local testing

Requirements

Once Docker is running, run the following commands:

composer up <-- starts the docker containers, PHP and ClickHouse
composer in <-- install composer dependencies in the PHP container
composer test <-- run the test suite

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Laravel Package Boilerplate

This package was generated using the Laravel Package Boilerplate.