صادق مرادی
2 سال پیش توسط صادق مرادی مطرح شد
1 پاسخ

گرفتن اطلاعات از چند تیبل و تبدیل به paginate

سلام دوستان
من 4 تا تیبل دارم ( فیلم، ویدیو، مقاله،موسیقی) که کلا جدا از همدیگر هستند.
میخوام یه کوئری بزنم که بصورت pagination‌ کار کنه و بر اساس created_at از همه این 4 تا تیبل اطلاعات رو بگیره و مثل حالتی که انگار از یک تیبل میگیریم اطلاعات رو به ما بده.
لطفا اگر میتونید راهنمایی کنید.


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 2 سال پیش مطرح شد
0

متد paginate که در انتهای متدهای الکوئنت استفاده میشه، یک کوئری رو میگیره و اون رو صفحه بندی میکنه و یک کالکشن برمیگردونه..
این متد در Query Builder هم موجوده و از طریق DB فِساد هم قابل دسترسه، و دقیقا یک کوئری رو میگیره و اون رو صفحه بندی میکنه و یک کالکشن برمیگردونه..

اما به نوع واکشی داده ها توجه کن،
شما باید یک عامل مشترک در جدول ها داشته بشی (که بتونی از جوین استفاده کنی)
و یا داده های هر جدول رو جدا بگیری و صفحه بندی کنی و نهایتا کنار هم قرار بدی... (که اینجوری هم هر جدول صفحه بندی خودش رو داره..)

الکوئنت یا بهتره بگیم کوئری بیلدر لاراول، صرفا دستورات SQL رو در اختیارت میگذاره ...
در SQL اگر سعی کنی با یک کوئری از چند تا جدول داده رو واکشی کنی، بحث الویت جدول ها پیش میاد و نتایج دریافتی هم زیاد دقیق نمیشه.. مثلا کوئری زیر رو در نظر بگیر:

SELECT * FROM categories,comments,drafts;

این کوئری از هر ۳ جدول اطلاعات رو برمیگردونه اما اولیت با جدولی هست که بیشترین سطر رو داره... یعنی پاسخ برگشتی از سمت دیتابیس به تعداد جدول بزرگتر حاوی سطر خواهد بود و برای جدول هایی که اون سطر ها رو ندارند، فیلدهاشون null برگشت داده میشه..

با توجه به نوع عملکردی که توضیح داده شد، بهتره کوئری ها رو جدا جدا روی جدول ها بزنی...

البته شرایط خاص هم پیش میاد که شما از متدهای collection ها استفاده میکنی و دیگه Instance کوئری بیلدر رو نداری که بخواهی از paginate استفاده کنی... و میتونی بری سراغ LengthAwarePaginator لاراول.


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

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