سلام من با لاراول 8 کار میکنم و این جداول و ستون ها رو درون دیتابیس دارم:
products:
id price
== =====
1 1600
2 2300
vendors:
id name
== ====
1 Sara
2 John
vendor_product:
product_id vendor_id price special_price
========== ========= ===== =============
1 1 2000 1000
2 1 8000 7000
1 2 1500 null
2 2 null null
جدول vendor_product یک رابط بین جداول vendors و products هستش که به وسیله متد belongsToMany به همدیگه متصلند و ستون های price و special_price در جدول vendor_product هم با متد pivot در model های Product و Vendor قابل دسترسی هستند.
در قدم اول میخوام که مقادیر null در ستون price جدول vendor_product رو با مقدار ستون price در جدول products تعویض کنم. البته نباید در دیتابیس تغییر کنه فقط میخوام به این صورت دریافتشون کنم:
vendor_product:
product_id vendor_id price special_price
========== ========= ===== =============
1 1 2000 1000
2 1 8000 7000
1 2 1500 null
2 2 2300 null
حالا باید بین ستون های price و special_price در جدول vendor_product در بین همه ردیف ها، ردیفی رو دریافت کنه که کوچک ترین مقدار رو داشته باشه برای مثال تو جدول بالا ردیف اول رو باید دریافت کنه چون مقدار special_price اون که 1000 هست کوچک ترین مقدار رو داره... چطور باید اینکارو بکنم؟
$product->vendors()->where...
سلام.
من با Eloquent زیاد جور نیستم، برای همین کد SQL چیزی که پرسیدید رو نوشتم:
SELECT products.id,
vendors.id,
LEAST(CASE WHEN vendor_product.price IS NULL THEN products.price ELSE vendor_product.price END, COALESCE(vendor_product.special_price, 0)) as price
FROM products
JOIN vendor_product ON vendor_product.product_id = products.id
JOIN vendors ON vendor_product.vendor_id = vendors.id
امیدوارم کمک کنه، موفق باشید.
الکوئنت از نسخه ۸ به بعد لاراول یه سری توابع مثل withSum, withMin & withMax هم داره که میتونی استفاده کنی
$lowestPrices = $product->vendors()
->withMin('products', 'price') // first argument is the name of relationship & second is column
->get()
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟