*/ private Collection $managers; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); $this->managers = collect(); } /** * Execute the console command. * * @return int */ public function service(): int { try { $db = DBUtil::instance(); $db->beginTransaction(); $targets = $this->getTargets(); $this->outputInfo(sprintf("取得対象 %d件", $targets->count())); // データハンドリング foreach ($targets as $data) { $this->handleData($data); } // コミット $this->commit(); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } return self::RESULTCODE_SUCCESS; } private function getTargets() { $access = SeasonTicketContract::getAccess(); $query = SeasonTicketContract::getQuery() ->whereDate(SeasonTicketContract::FIELD_CONTRACT_END_DATE, DateUtil::now()->setTime(0, 0)); return $access->all($query); } private function handleData(SeasonTicketContract $data) { $email = new TerminateOrderComplete($data); $manager = new EmailManager($email); $this->managers->push($manager); } private function commit() { foreach ($this->managers as $manager) { $manager->confirm(); } } }