'integer', 'manager_parkid' => 'integer', 'manager_device1' => 'integer', 'manager_device2' => 'integer', 'manager_alert1' => 'boolean', 'manager_alert2' => 'boolean', 'manager_quit_flag' => 'boolean', 'operator_id' => 'integer', 'manager_quitday' => 'date', 'created_at' => 'datetime', 'updated_at' => 'datetime' ]; /** * 所属駐輪場との関連 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function park() { return $this->belongsTo(Park::class, 'manager_parkid', 'park_id'); } /** * 登録オペレータとの関連 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function operator() { return $this->belongsTo(Ope::class, 'operator_id', 'ope_id'); } /** * アクティブな管理者のみを取得するスコープ * (退職フラグ = 0) * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeActive($query) { return $query->where('manager_quit_flag', 0); } /** * メールアドレスが設定されている管理者のみを取得するスコープ * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeHasEmail($query) { return $query->whereNotNull('manager_mail') ->where('manager_mail', '!=', ''); } /** * 指定駐輪場の管理者を取得するスコープ * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $parkId 駐輪場ID * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByPark($query, int $parkId) { return $query->where('manager_parkid', $parkId); } /** * メール送信対象の駐輪場管理者を取得 * * 条件: * - 退職フラグ = 0(在職中) * - メールアドレスが設定されている * * @return \Illuminate\Database\Eloquent\Collection */ public static function getMailTargetManagers() { return self::active() ->hasEmail() ->select(['manager_id', 'manager_name', 'manager_mail', 'manager_parkid']) ->get() ->map(function ($manager) { return [ 'manager_id' => $manager->manager_id, 'name' => $manager->manager_name, 'email' => $manager->manager_mail, 'park_id' => $manager->manager_parkid ]; }); } /** * 指定駐輪場のメール送信対象管理者を取得 * * @param int $parkId 駐輪場ID * @return \Illuminate\Database\Eloquent\Collection */ public static function getMailTargetManagersByPark(int $parkId) { return self::active() ->hasEmail() ->byPark($parkId) ->select(['manager_id', 'manager_name', 'manager_mail', 'manager_parkid']) ->get() ->map(function ($manager) { return [ 'manager_id' => $manager->manager_id, 'name' => $manager->manager_name, 'email' => $manager->manager_mail, 'park_id' => $manager->manager_parkid ]; }); } /** * 退職しているかどうかを判定 * * @return bool 退職しているかどうか */ public function isQuit(): bool { return (bool) $this->manager_quit_flag; } /** * アクティブ(在職中)かどうかを判定 * * @return bool 在職中かどうか */ public function isActive(): bool { return !$this->isQuit(); } /** * メールアドレスが設定されているかどうかを判定 * * @return bool メールアドレスが設定されているかどうか */ public function hasEmail(): bool { return !empty($this->manager_mail); } /** * 文字列表現 * * @return string */ public function __toString(): string { return sprintf( 'Manager[ID:%d, Name:%s, Park:%d, Email:%s]', $this->manager_id, $this->manager_name, $this->manager_parkid, $this->manager_mail ?? 'N/A' ); } }