enepochatova/influxdb-orm

PHP 库,帮助将实体转换为 InfluxDB 点并将其转换回。使用注解进行实体配置。

v1.1.3 2019-02-04 13:31 UTC

This package is auto-updated.

Last update: 2024-09-05 01:37:45 UTC


README

PHP 库,帮助将实体转换为 InfluxDB 点并将其转换回。使用注解进行实体配置。为了更好地理解关键概念,请查看官方的 InfluxDB 文档。

安装

composer require enepochatova/influxdb-orm

入门

创建要存储在数据库中的实体。给它 测量 注解。注解的 名称 属性是必需的。

<?php

namespace SomeNamespace;

use InfluxDB\ORM\Mapping\Annotations as InfluxDB;

/**
 * Class Cpu
 * @InfluxDB\Measurement(name="cpu")
 */
class Cpu
{
}

然后向类添加一些属性和它们的注解。属性的注解有

  • :必须给出数字属性,并在类层次结构中是唯一的。如果此注解未给出类层次结构中任何属性的注解,它将等于 null,并且不会创建 'value' 字段。
  • 字段:具有必需的 属性,这与关系数据库中的列名非常相似。
  • 标签:具有必需的 和可选的 类型 属性。默认情况下 类型 为 "字符串"。其他有效值是:"int","float","bool"。请注意,标签 总是以字符串的形式存储在数据库中。这就是为什么我们需要指定类属性的原始类型,以便在从数据库获取数据后将其转换回并正确构建实体。
  • 数组指标:必须给出包含一维关联数组的属性。此注解在类层次结构中必须是唯一的。数组值将作为具有适当键的字段存储在数据库中。
  • 时间戳:必须给出数字属性,并在类层次结构中是唯一的。如果此注解未给出类层次结构中任何属性的注解,它将等于 null,并且点将使用当前服务器时间戳存储。

示例

<?php

namespace SomeNamespace;

use InfluxDB\ORM\Mapping\Annotations as InfluxDB;

/**
 * Class Cpu
 * @InfluxDB\Measurement(name="cpu")
 */
class Cpu
{
    /**
     * @var float
     * @InfluxDB\Value
     */
    private $value;

    /**
     * @var int
     * @InfluxDB\Field(key="tasks")
     */
    private $tasks;

    /**
     * @var int
     * @InfluxDB\Field(key="services")
     */
    private $activeServices;

    /**
     * @var string
     * @InfluxDB\Field(key="host")
     */
    private $host;

    /**
     * @var int
     * @InfluxDB\Tag(key="category", type="int")
     */
    private $categoryId;
    
    /**
     * @var array
     * @InfluxDB\ArrayOfMetrix()
     */
    private $config;

    /**
     * Cpu constructor.
     * @param float $value
     * @param int $tasks
     * @param int $activeServices
     * @param string $host
     * @param int $categoryId
     */
    public function __construct($value, $tasks, $activeServices, $host, $categoryId, $config)
    {
        $this->value = $value;
        $this->tasks = $tasks;
        $this->activeServices = $activeServices;
        $this->host = $host;
        $this->categoryId = $categoryId;
        $this->config = $config;
    }
    
   // getters here

}
您需要将类属性设置为公共的或为它们实现获取器。

还可以映射 继承 的类。注解的读取从目标类开始,到其父类。子类中的注解具有更高的优先级。

实体完成后,我们需要创建一个 Repository 类,它从这个库扩展 BaseRepository

<?php

namespace SomeNamespace;


use InfluxDB\Database;
use InfluxDB\ORM\Mapping\AnnotationDriver;
use InfluxDB\ORM\Repository\BaseRepository;

class CpuRepository extends BaseRepository
{
    /**
     * CpuRepository constructor.
     * @param AnnotationDriver $annotationDriver
     * @param Database $database
     * @param string|null $precision
     * @throws \ReflectionException
     */
    public function __construct(AnnotationDriver $annotationDriver, Database $database, string $precision = null)
    {
        parent::__construct($annotationDriver, $database, Cpu::class, $precision);
    }
}

这就完成了!

现在您可以使用它了

<?php

...

$cpuRepositoryInstance->write($cpuInstance);

$cpuMetrics = $cpuRepositoryInstance->findAll();
... 

享受!