من جدولی به نام محصولات دارم که هر بار که کاربر محصول خود را به روز می کند، یک ردیف جدید در جدول دیگری به نام 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
سلام
اون آیدی محصول خارج از کوئری در دسترس هست؟ مثلا اینجوری:
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();
نه از بیرون نمیاد که ، همون پروداکتی که توی کوئری اصلی هست باید آی دی اش وارد ساب کوئری بشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟