مرتضی رحمانی
3 سال پیش توسط مرتضی رحمانی مطرح شد
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 3 سال پیش آپدیت شد
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 3 سال پیش مطرح شد
1

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

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

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

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