iboxs / orm-clickhouse
PHP ClickHouse ORM package
0.0.4
2026-08-13 04:10 UTC
Requires
- php: >=8.0
- ext-curl: *
- ext-json: *
- iboxs/iboxs-helper: *
- psr/log: ^1.0|^2.0|^3.0
- psr/simple-cache: ^1.0|^2.0|^3.0
README
基于 iboxs ORM 扩展的 ClickHouse HTTP 驱动,实现 Model / Query 风格调用。
特性
- 复用
iboxs/orm的Model、Query、DbManager调用链 - 通过 ClickHouse HTTP 接口直连,不依赖
ClickHouseDB\\Client - 支持常用链式查询:
name、table、where、field、order、limit、select、find、value、column - 支持写入:
insert、insertAll、update、delete - 支持模型方式调用:
Model::where()->select()
配置示例
'clickdb' => [ 'type' => 'clickhouse', 'hostname' => env('clickdb.host'), 'hostport' => env('clickdb.port'), 'database' => env('clickdb.database', 'default'), 'username' => env('clickdb.username', 'default'), 'password' => env('clickdb.password', ''), 'prefix' => '', 'https' => false, 'timeout' => 10, 'connect_timeout' => 5, 'trigger_sql' => true, 'fields_cache' => false, 'fields_strict' => true, ]
模型示例
namespace model\clickmodel; use model\ClickhouseModel; class Appuser extends ClickhouseModel { protected $table = 'appuser'; }
调用示例
use model\clickmodel\Appuser; $list = Appuser::where('app_id', 1001) ->field(['app_id', 'user_id', 'event_time']) ->order('event_time', 'desc') ->limit(20) ->select(); $row = Appuser::where('user_id', 9527)->find(); $count = Appuser::where('app_id', 1001)->count(); $value = Appuser::where('user_id', 9527)->value('event_time'); $column = Appuser::limit(10)->column('id'); $sum = Appuser::sum('app_id'); $avg = Appuser::avg('app_id'); $min = Appuser::min('app_id'); $max = Appuser::max('app_id'); $group = Appuser::field('app_id,count(*) as total')->group('app_id')->select(); Appuser::insert([ 'app_id' => 1001, 'user_id' => 9527, 'event_time' => date('Y-m-d H:i:s'), ]);
当前约束
- 通过 HTTP 接口执行,不支持 PDO / 事务语义
update/delete会转换为 ClickHouse 的ALTER TABLE ... UPDATE/DELETE- 不提供自增主键能力,
getLastInsID()恒为null - 表结构读取通过查询
system.columns - 组件已改为直接暴露
\iboxs\db\connector\Clickhouse与\iboxs\db\builder\Clickhouse,可配合type => 'clickhouse'直接使用 - 已自测通过:
select / where select / count / value / column / sum / avg / min / max / grouped select