Seyyed Mojtaba Hoseyni
4 سال پیش توسط Seyyed Mojtaba Hoseyni مطرح شد
1 پاسخ

ارسال نوتیفیکیشن گروهی به تعداد زیادی از کاربران

سلام دوستان
امیدوارم که حالتون خوب باشه
من قصد دارم تا یک نوتیفیکیشنی رو به تعداد زیادی از کاربران ارسال کنم (حدود 50000 کاربر)
اما هر کاری میکنم خطای Allowed memory size رو دریافت میکنم
کدم به این شکل هستش که من یک job ساختم و داخلش این کد رو نوشتم

Notification::send(User::all(),new MyNotification())

و با دستور queue:work اون job رو اجرا میکنم
البته چندین روش دیگه مثل Lazy collection ها رو هم امتحان کردم ولی همشون همین خطا رو بهم میدادن.
ممنون میشم راهنماییم کنید یا اگر روش بهتری بلدید بهم بگید.


ثبت پرسش جدید
وحید
تخصص : Fullstack
@forughi.vahid 4 سال پیش آپدیت شد
0

@SMH118
وقتی توی پارامتر تابع مینویسید User::all() عملا دارید کل دیتای جدول یوزر رو میگیرید میریزید توی یه متغیر ، خوب حجم دیتا بالاست و رمتون پر میشه. با چند تا روش میتونید کدتون رو بهبود بدید ، یکی اینکه کل فیلد های یوزر رو نگیرید ، فقط فیلد هایی که لازمه دریافت کنید ، دوم اینکه یوزر هارو تکه تکه بگیرید و روشون عملیاتی که میخواید رو انجام بدید، مثلا 1000 تا 1000 تا .

User::select('id','email','name')->chunk(1000, function($users){
    Notification::send($users,new MyNotification())
})

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام