DeviceStatus::Offline, ]; protected $casts = [ 'type' => DeviceType::class, 'status' => DeviceStatus::class, 'extends' => 'array', ]; protected $fillable = [ 'agricultural_base_id', 'is_recommend', 'sn', 'name', 'model', 'monitoring_point', 'type', 'status', 'extends', 'created_by', 'updated_by', 'sort', 'supplier', ]; public function scopeSupplierBy(Builder $query, string $supplier): void { $query->whereHas('supplier', fn ($query) => $query->where('supplier_key', $supplier)); } public function base() { return $this->belongsTo(AgriculturalBase::class, 'agricultural_base_id'); } public function createdBy(): BelongsTo { return $this->belongsTo(AdminUser::class, 'created_by'); } public function updatedBy(): BelongsTo { return $this->belongsTo(AdminUser::class, 'updated_by'); } public function supplier(): BelongsTo { return $this->belongsTo(Keywords::class, 'supplier_key', 'key'); } public function isTypeSoil(): bool { return $this->type === DeviceType::Soil; } public function isTypeMeteorological(): bool { return $this->type === DeviceType::Meteorological; } }