enepochatova / influxdb-orm
PHP 库,帮助将实体转换为 InfluxDB 点并将其转换回。使用注解进行实体配置。
v1.1.3
2019-02-04 13:31 UTC
Requires
- php: ^7.2
- doctrine/annotations: ^1.6
- influxdb/influxdb-php: ^1.14
Requires (Dev)
- phpunit/phpunit: ~6.3
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(); ...
享受!