سلام دوستان من تعداد داده های یکی از جداولم خیلی زیاد شده به همین دلیل سرعت واکشی داده هام خیلی کمه
دوستانی chunk رو برای این کار پیشنهاد کردن
اما این تابع مقدر true برمیگردونه و داده هام رو نمیده .
دوستان اگر ممکنه یک نمونه برا گرفتن داده با استفاده از تابع chunk رو قرار بدن ممنونشون میشم .
فیلد هایی ک روی اونها دارید کوئری میزنید رو ایندکس کنید مشکل حل میشه.این روش واسع رکوردهای بالا (البته نه در حد میلیون) جواب میده 👍
به شکل زیر میتونی از chunk استفاده کنی:
DB::table('users')->chunk(100, function($users)
{
foreach ($users as $user)
{
//
}
});
از طریق الکوئنت هم میتونی ازش استفاده کنی
@ali.bayat
گر بخواهیم با این دستوری که ارسال کردین همه کاربران رو با یه شرطی مثلا اگر is_enable==۱ برگردونیم چیکار باید بکنیم ؟
DB::table('users')->where('is_enable', 1)->chunk(100, function($users)
{
foreach ($users as $user)
{
//
}
});
@ali.bayat
خب من از این دستور استفاده کردم اما کالکشنی از کاربران رو نمیده بلکه مقدار true برمیگردونه
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.
ببینید وقتی ما از get استفاده میکنیم .. اون موقع هست که کالکشن برای ما بر میگرده و سپس میتونیم با chunk نتایج رو بخش بخش کنیم.
پس کدت باید شبیه زیر باشه:
DB::table('users')
->get()
->chunk(2, function($users){
foreach ($users as $userSet) {
var_dump($userSet);
}
});
@ali.bayat
درست میفرمایین اما من میخواستم این chunk داخل دیتا بیس اتفاق بیفته چون تعداد رکورد ها زیاد هستن زمان زیادی طول میکشه داده هام و بگیرم .
پیشنهادی که کرده بودن این بود که کوئری هر چقد به تعداد کوچکتر تقسیم بشه سرعت واکشی بالا میره و این کار با chunk امکان پذیر هست .
chunk رو باید روی یه Collection استفاده کرد..
نه روی Instance کلاس QueryBuilder
اما برای کاری که شما میخواهی انجام بدی
میشه از limit و یا take استفاده کرد.
مثلا:
User::where(...)->take(100);
چنین کوئری میسازه:
select * from users where ... LIMIT 100;
همچنین میتونی از Lazy Collection ها هم (ار نسخه ۶ و ۶ به بعد لاراول) استفاده کنی.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟