راکت
miladtajare
miladtajare
توسط miladtajare مطرح شد
حل
16 پاسخ

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

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

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


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

متد 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
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


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

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


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

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

Model::select('*')
    ->distinct('PrjNumber')
    ->orderByDesc('VersionsID_list')
    ->get()
    ->unique('PrjNumber');

miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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

       $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.bayat5 سال پیشمطرح شد
0

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

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


miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat5 سال پیشمطرح شد
-1

متد 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);

miladtajare
miladtajare
@milad.pc.tajare5 سال پیشمطرح شد
0

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


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

موفق باشی..


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

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