سلام دوستان من تعداد داده های یکی از جداولم خیلی زیاد شده به همین دلیل سرعت واکشی داده هام خیلی کمه
دوستانی chunk رو برای این کار پیشنهاد کردن
اما این تابع مقدر true برمیگردونه و داده هام رو نمیده .
دوستان اگر ممکنه یک نمونه برا گرفتن داده با استفاده از تابع chunk رو قرار بدن ممنونشون میشم .
شاید پاسخ شما همینجا باشد
@ali.bayat
گر بخواهیم با این دستوری که ارسال کردین همه کاربران رو با یه شرطی مثلا اگر is_enable==۱ برگردونیم چیکار باید بکنیم ؟
@ali.bayat
خب من از این دستور استفاده کردم اما کالکشنی از کاربران رو نمیده بلکه مقدار true برمیگردونه
@ali.bayat
نه متاسفانه باز هم کالکشن برنمیگردونه
Route::get('/all', function () {
return \DB::table('users')->where('is_enable',1)->chunk(100, function($users)
{
foreach ($users as $user)
{
//
}
})->get();
});
@ali.bayat
البته کد بالا خطا میده .
You must specify an orderBy clause when using this function.@ali.bayat
درست میفرمایین اما من میخواستم این chunk داخل دیتا بیس اتفاق بیفته چون تعداد رکورد ها زیاد هستن زمان زیادی طول میکشه داده هام و بگیرم .
پیشنهادی که کرده بودن این بود که کوئری هر چقد به تعداد کوچکتر تقسیم بشه سرعت واکشی بالا میره و این کار با chunk امکان پذیر هست .
chunk رو باید روی یه Collection استفاده کرد..
نه روی Instance کلاس QueryBuilder
اما برای کاری که شما میخواهی انجام بدی
میشه از limit و یا take استفاده کرد.
مثلا:
User::where(...)->take(100);
چنین کوئری میسازه:
select * from users where ... LIMIT 100;
همچنین میتونی از Lazy Collection ها هم (ار نسخه ۶ و ۶ به بعد لاراول) استفاده کنی.