Nouveau dans Laravel 13.36. Un mailable mis en file avec SerializesModels ne garde que l'identifiant de ses modèles ; le worker les relit avant d'envoyer. Si un modèle a été supprimé entre-temps, il lève une ModelNotFoundException, et la tâche échoue.
Pour une tâche (ShouldQueue), l'attribut #[DeleteWhenMissingModels] règle ce cas depuis longtemps : la tâche est retirée de la file, sans échec. Les mailables en file l'ignoraient.
Depuis Laravel 13.36
Les mailables en file lisent #[DeleteWhenMissingModels], et aussi #[FailOnTimeout] (un mail qui dépasse son délai est marqué en échec au lieu d'être retenté, ce qui pouvait l'envoyer deux fois) :
use Illuminate\Queue\Attributes\DeleteWhenMissingModels; #[DeleteWhenMissingModels] class OrderShipped extends Mailable implements ShouldQueue { use Queueable, SerializesModels; public function __construct(public Order $order) {} }
À faire
Quand l'entrepôt expédie une commande, le mail « Votre commande est en route » part en file. Mais un client annule parfois juste avant que le worker passe : la commande est supprimée, et chaque fois, une tâche s'ajoute à failed_jobs, où l'équipe la retrouve le lendemain.
Faites en sorte que le mail d'une commande disparue soit simplement abandonné.