سلام وقت همگی بخیر /
من یه جدول دارم به عنوان مثال که لیست کالا ها هستش و هر کالا برای خودش یه ورژن داره در کنارش
یعنی مثلا ممکنه که از مداد 5 تا باشه تو این جدول اما باید اخرین شماره این مداد یا همون اخرین ورژن رو نشون کاربر بده /
و حالا فقط قضیه یک کالا نیست باید لیست همه کالا هارو در بیارم و چک بشه که حتما اخرین ورژن اون کالا هم باشه / نمیخوام بخونم و بعد بگم کدوم اخرین ورژنه
**queryهست مستقیم از دیتابیس بخونم اینو؟ البته اینو در لاراول و eloquent میخوام ن query خام****
@mohaligateway
@AliValinejad
@hesammousavi
@ali.bayat
@mehdi.shahabbasian
متد 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);
سلام
درود بر شما
شماره سریال یا همون ورژن مد نظر شما به صورت عددی ورزن بندی شده یک دو سه .... هست. اگر به این شکل باشه می تونید از sortby استفاده کنید.
@milad.pc.tajare
@mohaligateway
و بقیه خروجی ها هم که باشه دیگه که 1 خورده / و ممکنه مثل این اولی که 81 بازم باشه و با ورژن های بزرگ تر
متن سوالت رو کاملا متوجه نشدم
با این ۲ فیلدی که توی جدول داری، چطوری میخواهی داده ها رو بگیری؟
@ali.bayat
ممنون از پاسختون
خب این به عنوان مثاله /
عکس رو ببینید
فکر کنید سمت چپی ها id یک کالا یا هر چی هستن
و سمت راستی ها ورژن اونا/ ورژن هر کالا
حالا میخوام که از هر کالا یکی رو برگردونه / و همینطور اخرین ورژنش رو
یعنی الان باید خروجی یک از شماره های 81 باشه و اونی که شماره VersonsID_list بزرگتره
@ali.bayat
با الکوئنت در واقع کار بسیار راحتیه و در کنارش کالکشن ها هم هستند
کوئری زیر رو امتحان کن:
Model::select('*')
->distinct('PrjNumber')
->orderByDesc('VersionsID_list')
->get()
->unique('PrjNumber');
@ali.bayat
این درست جواب میده / اما نباید get بشه / paginate در ادامه استفاده شده که نمیزاره..راه حلی برای این هست؟
و به جز صفحه بندی یه سری where , .. هم دارم / که در ادامه میگه وقتی get میکنی یعنی خوندی دیگه نمیشه از اینا استفاده کرد / از این توابع صفحه بندی یا هر دستور دیگه eloquent
راهی هست همین دستوری که بالا فرستادید درسته اما با این شرایط؟
@ali.bayat
@hesammousavi
و یه سوال دیگه این Get که مابین ستورات شماست
اگر که تعداد رکورد بالا بره / مثلا 100.000 یا هر چی / خیلی بیشتر بشه کار میکنه؟ احساس میکنم مشکل ساز بشه؟
نمیشه/؟
@ali.bayat
@hesammousavi
کاری که من برای این کردم اینه که اول اومدم از همین
$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);
این الان بهینه نیست و اشتباس / در کل من میخوام این کارو کنم
وقتی از get استفاده میکنیم از اونج به بعد خروجیمون Collection میشه برا همین دیگه paginate رو نداریم
و الان unique که آخر کار هست در واقع متد کالکشن هست و در سطح کوئری اعمال نمیشه.
حالا اگر اون متغیر ids قرار باشه داده زیادی برگردونه، خوب ممکنه با حجم داده بالا کمی کند عمل کنه. پس باید unique بودن رو در سطح کوئری چک کنی
خب الان راهی هست که هم تکراری ها حذف بشه و هم بزرگترین ورژن رو برگردونه ولی به کالکشن تبدل نشه؟ که بشه روش صفحه بندی رو زد یا هر شرط دیگه ای رو؟
@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);
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟