morphOne(Task::class, 'taskable'); } public function store(): BelongsTo { return $this->belongsTo(Store::class); } public function storeMaster(): BelongsTo { return $this->belongsTo(Employee::class, 'store_master_id'); } protected function photos(): Attribute { return Attribute::make( get: function (mixed $value) { if (! is_array($photos = json_decode($value ?? '', true))) { $photos = []; } return $photos; }, set: fn (mixed $value) => json_encode(is_array($value) ? $value : []), ); } /** * 任务状态 */ protected function taskStatus(): Attribute { return Attribute::make( get: function (mixed $value) { $datetime = now(); if ($datetime->lt($this->task->start_at)) { return TaskHygieneStatus::None; } if ($this->task->isSuccess() || $this->checkSuccess()) { return TaskHygieneStatus::Success; } if ($this->checkProcessing()) { return TaskHygieneStatus::Checking; } if ($this->checkFail()) { return TaskHygieneStatus::Unpassed; } if ($datetime->lt($this->task->end_at)) { return TaskHygieneStatus::Pending; } return TaskHygieneStatus::Failed; }, ); } }