moirei/hogql

使用 Laravel 的查询构建器与 PostHog 的 HogQL API 进行交互。

0.2.0 2024-08-05 08:48 UTC

This package is auto-updated.

Last update: 2024-09-05 09:21:01 UTC


README

这个 PostHog (HogQL) Laravel 查询构建器包允许您使用 Laravel 的查询构建器与 PostHog 的 HogQL API 进行交互。这个包简化了构建和执行分析查询的过程,让您能够在与 PostHog 强大的数据分析平台合作时,利用 Laravel 直观的查询语法。

特性

  • 熟悉的语法:使用 Laravel 的查询构建器语法来构建复杂的查询。
  • 安全访问:验证并限制对 PostHog 中特定表的安全访问。
  • 无缝集成:直接从 PostHog 执行查询并检索结果。
  • 可配置别名:轻松映射和别名表和列名以提高可读性。
  • Eloquent 指标:轻松集成并使用与 moirei/eloquent-metrics

安装

composer require moirei/hogql

发布配置(可选)。

php artisan vendor:publish --tag="hogql-config"

设置

安装后,您需要获取您的 产品 ID 和一个 个人 API 密钥。此密钥至少需要 query:read 范围。

更新您的 .env 文件以包含 POSTHOG_PRODUCT_IDPOSTHOG_API_TOKEN

使用方法

use MOIREI\HogQl\Facade as HogQl;
...

HogQl::select(['event_name', 'COUNT(*) as event_count'])
                ->whereBetween('timestamp', ['2024-01-01 12:00:00', '2024-07-28 10:15:39'])
                ->groupBy('event_name')
                ->orderBy('event_count', 'DESC')
                ->get();

注意:get() 操作始终转换原始结果。例如,上面的查询返回一个包含 event_nameevent_count 键/值的数组集合。

扩展使用

获取 DB 查询构建器实例:

$query = HogQl::query();
// OR
$query = HogQl::query('some_other_table');

$result = $query->get();

使用选择语句开始查询:

$query = HogQl::select('properties.$os as os')->where('os', 'iOS');
$result = $query->count();

引用别名:

在配置中设置别名

// config/hogql.php
...
    'aliases' => [
        'device' => 'properties.$device',
        'os' => 'properties.$os',
        ...
    ],

通过选择引用它们

$query = HogQl::select(['device', 'os']);
$result = $query->get();

获取 Eloquent 查询构建器实例:

返回 Eloquent 模型实例。

$query = HogQl::model();
// OR
$query = HogQl::eloquent();

$result = $query->select(['properties.$current_url', 'properties.$device'])->get();

解析查询字符串:

$query = HogQl::parse('SELECT event FROM events');
$result = $query->where('properties.my_user', $user->id)->count();

获取字符串查询的结果:

$response = HogQl::get('SELECT event, COUNT() FROM events GROUP BY event ORDER BY COUNT() DESC');

获取字符串查询的原始结果:

返回原始的 HogQLQueryResponse 响应。

$response = HogQl::getRaw('SELECT event, COUNT() FROM events GROUP BY event ORDER BY COUNT() DESC');

与 moirei/eloquent-metrics:

moirei/eloquent-metrics 与 Chartjs 兼容。

$query = HogQl::eloquent()->where('event', '$pageview');

$metrics = Trend::make()
            ->name('Page views')
            ->period('week')
            ->sumByDays($query);

测试

composer test

贡献指南

欢迎任何拉取请求或讨论。请注意,每个提供新功能或修复错误的拉取请求都应该包含适当的单元测试。

许可

MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。