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