Here's yet another example of how I got burned when my local dev environment didn't match my prod environment. Sync queues work differently than other queue types.
masteringlaravel.io/daily/2024-08-06-sync-queue-works-differently-than-async
Actually, the tip should be not to serialize models in asynchronous queues.
Takes up to much memory with Redis.
Serialization isn't 100% accurate here since Laravel only stores Eloquent model IDs and re-hydrates from the database. But the problem is the same: you lose access to in-memory change state.
It does do that? I remember it differently. It was i believe Mohammed Said (Mr. Queues) who suggested to only pass the ID of the model and never serialize the model in a job.
You'd rather have job middleware or some method in your job that checks, if you still need to handle the job
It‘s a question of what you need in the job. If it‘s okay for the job to work with a fresh model, only pass the ID and load the model from the DB (what is the case in 99%). If you really need the object, you have to serialize the model and be aware of possible impacts (complex object serialization, stale model data in async jobs, data exposure, …)