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-master"
}
}
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
whereIn
orwhereNotIn
whereNull
orwhereNotNull
whereDate
,whereMonth
,whereDay
,whereYear
,whereTime
orWhereColumn
whereExists
- Subquery Where Clauses
- Upserts
updateOrInsert
- Updating JSON Columns
->update(['options->enabled' => true]);
increment
ordecrement
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.
Security
If you discover any security related issues, please email patrique.ouimet@gmail.com 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.