influxdb-orm時(shí)序數(shù)據(jù)庫(kù) InfluxDB 的 ORM
influxdb-orm 是一個(gè)用于 InfluxDB 時(shí)序數(shù)據(jù)庫(kù)的 ORM,終結(jié)沒(méi)有 InfluxDB ORM 的時(shí)代。
常用操作一把梭,支持 php-fpm、Swoole 環(huán)境,一鍵輕松切換。
可以用于所有傳統(tǒng)框架、所有 Swoole 框架中!
Composer
本項(xiàng)目可以使用composer安裝,遵循psr-4自動(dòng)加載規(guī)則,在你的 composer.json 中加入下面的內(nèi)容:
{
"require": {
"yurunsoft/influxdb-orm": "^1.0.0"
}
}
然后執(zhí)行 composer update 安裝。
使用
Swoole 支持
在 WorkerStart 事件中執(zhí)行:
\Yurun\Util\YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class);
定義模型
具體可參考
example/test.php
<?php
namespace Yurun\InfluxDB\ORM\Example\Model;
use Yurun\InfluxDB\ORM\BaseModel;
use Yurun\InfluxDB\ORM\Annotation\Tag;
use Yurun\InfluxDB\ORM\Annotation\Field;
use Yurun\InfluxDB\ORM\Annotation\Value;
use Yurun\InfluxDB\ORM\Annotation\Timestamp;
use Yurun\InfluxDB\ORM\Annotation\Measurement;
/**
* @Measurement(name="aaa")
*/
class A extends BaseModel
{
/**
* @Tag(name="id", type="int")
*
* @var int
*/
private $id;
/**
* @Field(name="name", type="string")
*
* @var string
*/
private $name;
/**
* @Timestamp(precision="s")
*
* @var int|string
*/
private $time;
/**
* @Value
*
* @var int
*/
private $value;
public static function create($id, $name, $time, $value)
{
return new static(compact('id', 'name', 'time', 'value'));
}
/**
* Get the value of time
*
* @return int|string
*/
public function getTime()
{
return $this->time;
}
/**
* Set the value of time
*
* @param int|string $time
*
* @return self
*/
public function setTime($time)
{
$this->time = $time;
return $this;
}
/**
* Get the value of id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of id
*
* @param int $id
*
* @return self
*/
public function setId(int $id)
{
$this->id = $id;
return $this;
}
/**
* Get the value of name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set the value of name
*
* @param string $name
*
* @return self
*/
public function setName(string $name)
{
$this->name = $name;
return $this;
}
/**
* Get the value of value
*
* @return int
*/
public function getValue()
{
return $this->value;
}
/**
* Set the value of value
*
* @param int $value
*
* @return self
*/
public function setValue(int $value)
{
$this->value = $value;
return $this;
}
}
數(shù)據(jù)寫(xiě)入
use Yurun\InfluxDB\ORM\InfluxDBManager;
// 設(shè)置客戶端名稱為test,默認(rèn)數(shù)據(jù)庫(kù)為db_test
InfluxDBManager::setClientConfig('test', '127.0.0.1', 8086, '', '', false, false, 0, 0, 'db_test');
// 設(shè)置默認(rèn)數(shù)據(jù)庫(kù)為test
InfluxDBManager::setDefaultClientName('test');
// 寫(xiě)入數(shù)據(jù),支持對(duì)象和數(shù)組
$r = A::write([
A::create(mt_rand(1, 999999), time(), time(), mt_rand(1, 100)),
['id'=>1, 'name'=>'aaa', 'time'=>time(), 'value'=>mt_rand(1, 100)],
]);
var_dump($r);
數(shù)據(jù)查詢
// 獲取查詢器
$query = A::query();
// 常見(jiàn)用法,反正就那一套,不多說(shuō)了
$query->field('id,name')
->from('table')
->where([
'id' => 1
])->where('id', '=', 1)
->orWhere('id', '=', 1)
->order('time', 'desc')
->group('id')
->limit(0, 10);
// 查詢結(jié)果,與 InfluxDB 官方客戶端一樣用法
$resultSet = $query->select();
// 查詢結(jié)果轉(zhuǎn)模型,適合用于查詢記錄而不是統(tǒng)計(jì)數(shù)據(jù)
$model = $resultSet->getModel(A::class);
// 查詢結(jié)果轉(zhuǎn)模型列表,適合用于查詢記錄而不是統(tǒng)計(jì)數(shù)據(jù)
$list = $resultSet->getModelList(A::class);
模型快捷查詢
適合用于查詢記錄而不是統(tǒng)計(jì)數(shù)據(jù)
use Yurun\InfluxDB\ORM\Query\QueryBuilder;
// 查詢結(jié)果轉(zhuǎn)模型,適合用于查詢記錄而不是統(tǒng)計(jì)數(shù)據(jù)
$model = A::find(function(QueryBuilder $query){
$query->where('id', '=', 1)->limit(1);
});
// 查詢結(jié)果轉(zhuǎn)模型列表,適合用于查詢記錄而不是統(tǒng)計(jì)數(shù)據(jù)
$list = A::select(function(QueryBuilder $query){
$query->where('id', '=', 1)->limit(2);
});
獲取單個(gè)字段值
$count = A::query()->field('count(value)')->select()->getScalar();評(píng)論
圖片
表情
