73 lines
1.9 KiB
PHP
73 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use EloquentFilter\Filterable;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
|
|
class Device extends Model
|
|
{
|
|
use Filterable;
|
|
|
|
public const TYPE_MONITOR = 1; //监控设备
|
|
public const TYPE_SOIL = 2; //土壤设备
|
|
public const TYPE_WATER_QUALITY = 3; //水质设备
|
|
public const TYPE_METEOROLOGICAL = 4; //气象设备
|
|
public const TYPE_AIR = 5; //通风设备
|
|
public const TYPE_ATOMIZING = 6; //喷雾设备
|
|
|
|
public const STATE_DISABLED = 0;
|
|
public const STATE_ONLINE = 1;
|
|
public const STATE_OFFLINE = 2;
|
|
public const STATE_FAULT = 3;
|
|
|
|
protected $casts = [
|
|
'extends' => 'json'
|
|
];
|
|
|
|
protected $fillable = [
|
|
'name', 'sn', 'powered_by', 'type', 'model_sn', 'state', 'extends',
|
|
'is_enable', 'sort', 'is_recommend',
|
|
'group_tags'
|
|
];
|
|
|
|
public function scopePoweredBy(Builder $query, string $factory): void
|
|
{
|
|
$query->whereHas('factory', fn ($query) => $query->where('key', $factory));
|
|
}
|
|
|
|
|
|
protected function serializeDate(\DateTimeInterface $date){
|
|
return $date->format('Y-m-d H:i:s');
|
|
}
|
|
|
|
public static function typeMap()
|
|
{
|
|
return [
|
|
self::TYPE_MONITOR => '监控设备',
|
|
self::TYPE_SOIL => '土壤设备',
|
|
self::TYPE_WATER_QUALITY => '水质设备',
|
|
self::TYPE_METEOROLOGICAL => '气象设备',
|
|
self::TYPE_AIR => '通风设备',
|
|
self::TYPE_ATOMIZING => '喷雾设备'
|
|
];
|
|
}
|
|
|
|
public function logs(): HasMany
|
|
{
|
|
return $this->hasMany(DeviceLog::class);
|
|
}
|
|
|
|
public function factory()
|
|
{
|
|
return $this->belongsTo(Keyword::class, 'powered_by');
|
|
}
|
|
|
|
public function isTypeSoil(): bool
|
|
{
|
|
return $this->type === static::TYPE_SOIL;
|
|
}
|
|
}
|