whereNull('published_ever_at') ->where(function ($query): void { $query->whereNotNull('published_at') ->orWhere('status', PressReleaseStatus::Published->value) ->orWhereIn('id', PressReleaseStatusLog::query()->where('to_status', PressReleaseStatus::Published->value)->select('press_release_id')); }); $count = $candidates->count(); $this->info("Meldungen ohne published_ever_at, die öffentlich waren: {$count}"); if ($this->option('dry-run') || $count === 0) { return self::SUCCESS; } $updated = 0; $candidates->select(['id', 'published_at', 'created_at'])->chunkById(1000, function ($releases) use (&$updated): void { foreach ($releases as $release) { $firstLog = PressReleaseStatusLog::query() ->where('press_release_id', $release->id) ->where('to_status', PressReleaseStatus::Published->value) ->min('created_at'); $at = collect([$release->published_at, $firstLog, $release->created_at])->filter()->min(); DB::table('press_releases')->where('id', $release->id)->update(['published_ever_at' => $at]); DB::table('press_release_images')->where('press_release_id', $release->id)->whereNull('published_ever_at') ->update(['published_ever_at' => DB::raw('CASE WHEN created_at > '.DB::getPdo()->quote((string) $at).' THEN created_at ELSE '.DB::getPdo()->quote((string) $at).' END')]); $updated++; } }); $this->info("Gesetzt: {$updated} Meldungen samt Bildern."); return self::SUCCESS; } }