راکت
حل شده

inRandomOrder with paginate

10 پاسخ

سلام. من به یک مسئله جالب در query builder برخوردم. وقتی در کوئری هم زمان از inRandomOrder و paginate استفاده می کنم و تعداد صفحات بیشتر از یکی میشه ، نتیجه تکراری میاره. دوستان کسی قبلا راه حلشو پیدا کرده ؟
تشکر

ثبت پرسش جدید

پاسخ‌ها

10
hamed
hamed
@shojai80
بهترین پاسخ

یک seed باید به تابع بدهیم و آن را برای صفحات بعدی در سشن ذخیره کنیم
https://blog.antoine-augusti.fr/2014/05/paginate-posts-correctly-when-they-are-random-ordered/

الیاس سخاوتی نیا
الیاس سخاوتی نیا
@elyassir

تخصص: علاقه‌مند به برنامه‌‎نویسی

hamed
hamed
@shojai80

@elyasbeshkani
اینو دیده بودم . شاید درست متوجهش نشده باشم. اما من برداشتم این بود که بجای foobar باید نام یک از ستونهای جدول رو بزارم. که با این کار نتایج از حالت رندوم خارج میشه

شاید پاسخ شما همین‌جا باشد

الیاس سخاوتی نیا
الیاس سخاوتی نیا
@elyassir

تخصص: علاقه‌مند به برنامه‌‎نویسی

@shojai80

فکر کنم طبق چیزی که اینجا توی مستندات گفته باید یه seed بهش بدین که خودمم دقیق نمیدونم چیه
https://laravel.com/api/6.x/Illuminate/Database/Query/Builder.html#method_inRandomOrder

یا اینکه اینم شاید جواب بده (اضافه کردن distinct)

->inRandomOrder()->distinct()->paginate(10);
hamed
hamed
@shojai80

من حتی inrandomorder رو با '((()orderBy(DB::raw('RAND جایگزین کردم ولی همچنان مشکل باقیست

hamed
hamed
@shojai80

@elyasbeshkani
distinct رو هم امتحان کردم ولی فرقی نمی کنه

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

خب این inRandomOrder رو اول کوئری اضاف میکنی بعد paginate میکنی؟

hamed
hamed
@shojai80

@juza66
نفهمیدم جملتون سوالیه یا خبری.
;(inRandomOrder()->paginate(10<-
این کدشه

hamed
hamed
@shojai80

@juza66
@elyasbeshkani
من تست و خطا به کد زیر رسیدم که فکر کنم مشکلو حل کرده. البته چراشو نفهمیدم. اگر عزیزی می دونه ممنون میشم توضیح بده.

->inRandomOrder(rand(1,10000))
hamed
hamed
@shojai80

متاسفانه اینم جواب نداد. اشتباه کردم

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

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