| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | <?phpnamespace app\common\model;use think\facade\Db;use app\common\model\Contract;use app\common\model\ProjectSchedule;/** *  * @property array<number> $participants_id * @property number $responsibility_person_id * @property array<ProjectSchedule> $schedules * @property array<Contract> $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 getParticipantsAttr($value, $data) {        return (new Admin)->where('id', 'in', $this->participants_id)->select()->map(fn($admin) => $admin->real_name);    }}
 |