مهدی
3 سال پیش توسط مهدی مطرح شد
2 پاسخ

کوئری محصولاتی که فروشندگان قیمت آنها را کاهش داده اند

من جدولی به نام محصولات دارم که هر بار که کاربر محصول خود را به روز می کند، یک ردیف جدید در جدول دیگری به نام productpricehistory ذخیره می شود.

جداول من :

products :

id  (primary key)
name  (varchar)
price  (decimal)
product_price_history :

id  (primary key)
product_id  (fk to products)
price  (decimal)
created_at (dateTime)

مدلهای من :
Product
ProductPriceHistory

رابطه جدول فرزند را در داخل مدل محصول به صورت زیر نوشته ام

class Product extends Model {

  public function history()
  {
     return $this->hasMany(ProductPriceHistory::class, 'product_id', 'id');
  }
}

چگونه در لاراول پرس و جویی بنویسم که لیستی از محصولات با قیمت های کاهش یافته را نمایش دهد؟ به عبارت دیگر لیست محصولاتی که اخیرا قیمت آنها کاهش یافته را نشان دهید.
کدهای زیر رو نوشتم فقط مشکلم اینه که موقع محاسبه میانگین در ساب تیبل نمیدونم چطور محدود کنم تا فقط ردیفهای مربوط به هر محصول رو محاسبه کنه
اگه بتونم شناسه محصول رو به ساب کوئری پاس بدم مشکلم حل میشه

        return Product::whereHas('history')->where('price', '<', function($q){
            $q->selectRaw('avg(i.price)')->from('products_price_history as i');
        })->get();

مثلا برای هر محصول بصورت دستی شناسه رو وارد میکنم مشکل حل میشه . منظورم کد زیر هست :

        return Product::whereHas('history')->where('price', '<', function($q){
            $q->selectRaw('avg(i.price)')->from('products_price_history as i')->where('product_id' , 1);
        })->get();

که اون عدد 1 که نوشتم باید از query والد بیاد داخل ساب کوئری

ممنون میشم دوستانی که میتونن کمک کنن

@endworld @mhyeganeh @mohammadphp @samanzdev @abdolrahman @milad @alarus.ir @meysampro @hosseinshirinegad98 @erfanmohseni406


ثبت پرسش جدید
الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 3 سال پیش مطرح شد
0

سلام
اون آیدی محصول خارج از کوئری در دسترس هست؟ مثلا اینجوری:

 return Product::whereHas('history')->where('price', '<', function($q) use ($product_id) {
    $q->selectRaw('avg(i.price)')->from('products_price_history as i')->where('product_id' , $product_id);
})->get();

مهدی
تخصص : توسعه دهنده
@mehdi539 3 سال پیش مطرح شد
0

نه از بیرون نمیاد که ، همون پروداکتی که توی کوئری اصلی هست باید آی دی اش وارد ساب کوئری بشه


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

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