$participants_id * @property number $responsibility_person_id * @property array $schedules * @property array $contracts */ class Project extends Base { protected $schema = [ 'id' => 'int', // id 'create_time' => 'datetime', // 创建时间 'update_time' => 'datetime', // 更新时间 'delete_time' => 'datetime', // 删除时间 'name' => 'varchar', // 名称 'responsibility_person_id' => 'int', // 责任人id 'desc' => 'text', // 描述 'source' => 'varchar', // 来源 'estimated_amount' => 'int', // 预估金额, 分为单位 'status' => 'varchar', // 状态值 'project_start_date' => 'date', // 项目周期开始时间 'project_end_date' => 'date', // 项目周期结束时间 'dev_start_date' => 'date', // 开发开始时间 'dev_end_date' => 'date', // 开发结束时间 'pre_dev_time' => 'int', // 约定开发周期,单位为天 'maintain_start_date' => 'date', // 维护开始时间 'maintain_end_date' => 'date', // 维护结束时间 'pre_maintain_time' => 'int', // 约定维护周期,单位为天 'participants_id' => 'json', // 项目参与人员 ]; protected $type = [ 'participants_id' => 'array' ]; public function responsibilityPersonName() { return $this->belongsTo(Admin::class, 'responsibility_person_id', 'id'); } public function contracts() { return $this->hasMany(Contract::class); } public function schedules() { return $this->hasMany(ProjectSchedule::class) ->field('s.*') ->field('a.real_name as updater') ->alias('s') ->order('s.start_date asc') ->join('admin a', 'a.id = s.updater_id', 'LEFT'); } public function getParticipantsIdAttr($value, $data) { return array_map(fn($i) => (int) $i, json_decode($value) ?? []); } public function getParticipantsAttr($value, $data) { return (new Admin)->where('id', 'in', $this->participants_id)->select()->map(fn($admin) => $admin->real_name); } }