Kuyruğa (queue) bir Eloquent modeli gönderdiğinizde Laravel arkada ne yapıyor biliyor musunuz? Modelin tamamını, ilişkileriyle birlikte serileştirip kuyruğa gömüyor. Model büyükse kuyruk şişiyor, bellek doluyor, işlem yavaşlıyor.
SerializesModels bunu çözüyor. Modelin tamamı yerine sadece ID'sini taşıyor, iş çalışma zamanı gelince modeli veritabanından taze şekilde çekiyor.
Kullanımı
namespace App\Jobs;
use Illuminate\Queue\SerializesModels;
class ProcessOrder
{
use SerializesModels;
public function __construct(public $order) {}
public function handle()
{
// Model burada yeniden yüklenir
$order = $this->order;
// Model üzerinde işlem yapabilirsiniz
$order->update(['status' => 'completed']);
}
}Tek satır: use SerializesModels; Hepsi bu.
Ne kazanıyorsunuz
Kuyrukta taşınan veri küçülüyor. Özellikle ilişkisi bol modellerde fark ciddi. İşlem başladığında model veritabanından güncel haliyle çekildiği için, kuyrukta beklerken değişmiş verilerle çalışma riski de ortadan kalkıyor.
Dikkat edilecek nokta
Model, iş çalışana kadar silinmişse hata alırsınız. Kuyrukta uzun bekleyen işlerde bunu hesaba katın. Ayrıca modelin yeniden yüklenmesi için veritabanının erişilebilir olması şart, o an DB ayaktaysa sorun yok.
Kısacası: kuyrukta model taşıyorsanız bu trait'i ekleyin. Maliyeti sıfır, faydası bariz.