راکت
حل شده

خروجی فیلتر شده از دیتابیس laravel . eloquent

16 پاسخ

سلام وقت همگی بخیر /
من یه جدول دارم به عنوان مثال که لیست کالا ها هستش و هر کالا برای خودش یه ورژن داره در کنارش
یعنی مثلا ممکنه که از مداد 5 تا باشه تو این جدول اما باید اخرین شماره این مداد یا همون اخرین ورژن رو نشون کاربر بده /
و حالا فقط قضیه یک کالا نیست باید لیست همه کالا هارو در بیارم و چک بشه که حتما اخرین ورژن اون کالا هم باشه / نمیخوام بخونم و بعد بگم کدوم اخرین ورژنه
**queryهست مستقیم از دیتابیس بخونم اینو؟ البته اینو در لاراول و eloquent میخوام ن query خام****

@mohaligateway
@AliValinejad
@hesammousavi
@ali.bayat
@mehdi.shahabbasian

ثبت پرسش جدید

پاسخ‌ها

16
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

متد distinct در لاراول معمولا با orderBy به خوبی کنار نمیاد
پس میتونی ابتدا id ها رو بگیری و بعد داخل کوئری بعد از whereIn و paginate و orderBy استفاده کنی

$ids = Hepler_table::distinct('PrjNumber')->pluck('id','PrjNumber')->values();
$products = Hepler_table::whereIn($ids)->orderByDesc('VersonsID_list')->paginate(8);
moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

سلام
درود بر شما
شماره سریال یا همون ورژن مد نظر شما به صورت عددی ورزن بندی شده یک دو سه .... هست. اگر به این شکل باشه می تونید از sortby استفاده کنید.
@milad.pc.tajare

miladtajare
miladtajare
@milad.pc.tajare

توضیح تصویر رو وارد کنید

داخل این عکس ببینید میخوام از اون که 81 یکیش بیاد و اون بزرگتره
@@mohaligateway

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

miladtajare
miladtajare
@milad.pc.tajare

@mohaligateway
و بقیه خروجی ها هم که باشه دیگه که 1 خورده / و ممکنه مثل این اولی که 81 بازم باشه و با ورژن های بزرگ تر

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

متن سوالت رو کاملا متوجه نشدم
با این ۲ فیلدی که توی جدول داری، چطوری میخواهی داده ها رو بگیری؟

miladtajare
miladtajare
@milad.pc.tajare

@ali.bayat
ممنون از پاسختون
خب این به عنوان مثاله /
عکس رو ببینید
فکر کنید سمت چپی ها id یک کالا یا هر چی هستن
و سمت راستی ها ورژن اونا/ ورژن هر کالا
حالا میخوام که از هر کالا یکی رو برگردونه / و همینطور اخرین ورژنش رو

miladtajare
miladtajare
@milad.pc.tajare

یعنی الان باید خروجی یک از شماره های 81 باشه و اونی که شماره VersonsID_list بزرگتره
@ali.bayat

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

با الکوئنت در واقع کار بسیار راحتیه و در کنارش کالکشن ها هم هستند
کوئری زیر رو امتحان کن:

Model::select('*')
    ->distinct('PrjNumber')
    ->orderByDesc('VersionsID_list')
    ->get()
    ->unique('PrjNumber');
miladtajare
miladtajare
@milad.pc.tajare

@ali.bayat
این درست جواب میده / اما نباید get بشه / paginate در ادامه استفاده شده که نمیزاره..راه حلی برای این هست؟

miladtajare
miladtajare
@milad.pc.tajare

و به جز صفحه بندی یه سری where , .. هم دارم / که در ادامه میگه وقتی get میکنی یعنی خوندی دیگه نمیشه از اینا استفاده کرد / از این توابع صفحه بندی یا هر دستور دیگه eloquent
راهی هست همین دستوری که بالا فرستادید درسته اما با این شرایط؟
@ali.bayat
@hesammousavi

miladtajare
miladtajare
@milad.pc.tajare

و یه سوال دیگه این Get که مابین ستورات شماست
اگر که تعداد رکورد بالا بره / مثلا 100.000 یا هر چی / خیلی بیشتر بشه کار میکنه؟ احساس میکنم مشکل ساز بشه؟
نمیشه/؟
@ali.bayat
@hesammousavi

miladtajare
miladtajare
@milad.pc.tajare

کاری که من برای این کردم اینه که اول اومدم از همین

       $ids =  Hepler_table::select('*')
        ->distinct('PrjNumber')
        ->orderByDesc('VersonsID_list')
        ->get()
        ->unique('PrjNumber')->pluck('id');

اینو گرفتم / و بعدش اومدم where , ...نوشتم

$Hepler_table = new Hepler_table();
$Hepler_table = $Hepler_table->whereIn('id',$ids);
$Hepler_table = $Hepler_table->latest('id')->paginate(8);

این الان بهینه نیست و اشتباس / در کل من میخوام این کارو کنم

@ali.bayat @hesammousavi

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

وقتی از get استفاده میکنیم از اونج به بعد خروجیمون Collection میشه برا همین دیگه paginate رو نداریم
و الان unique که آخر کار هست در واقع متد کالکشن هست و در سطح کوئری اعمال نمیشه.

حالا اگر اون متغیر ids قرار باشه داده زیادی برگردونه، خوب ممکنه با حجم داده بالا کمی کند عمل کنه. پس باید unique بودن رو در سطح کوئری چک کنی

miladtajare
miladtajare
@milad.pc.tajare

خب الان راهی هست که هم تکراری ها حذف بشه و هم بزرگترین ورژن رو برگردونه ولی به کالکشن تبدل نشه؟ که بشه روش صفحه بندی رو زد یا هر شرط دیگه ای رو؟
@ali.bayat

miladtajare
miladtajare
@milad.pc.tajare

@ali.bayat
ممنونم ازتون ، و وقتی که گزاشتید / خدا خیرتون بده

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

موفق باشی..

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

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