مرتضی رحمانی
4 سال پیش توسط مرتضی رحمانی مطرح شد
2 پاسخ

دریافت یک ردیف با کوچک ترین مقدار بین دو ستون در لاراول

سلام من با لاراول 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...

فلاتر
فلاتر
فلاتر
تگ‌های محبوب
ثبت پرسش جدید
Muhammad
تخصص : Back-End Developer
@muhammad 4 سال پیش آپدیت شد
0

سلام.

من با 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

امیدوارم کمک کنه، موفق باشید.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

الکوئنت از نسخه ۸ به بعد لاراول یه سری توابع مثل withSum, withMin & withMax هم داره که میتونی استفاده کنی

$lowestPrices = $product->vendors()
->withMin('products', 'price') // first argument is the name of relationship & second is column
->get()

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

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