🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ mohammad dadkhah
متود discountedPrice
جامعه لاراول ایجاد شده در ۲۸ آذر ۱۴۰۰

سلام

لطفا به کد‌ها توجه کنید

در class product

روی نمونه discountcalculator شما داردید متود discountedPrice($coupons->first() ,$price) را صدا می‌زنید وprice را پاس می‌دهید

class Product extends Model
 public function getPriceAttribute($price)
    {
        $coupons = $this->category->validCoupons();
        if ($coupons->isNotEmpty()){
            $discountCalculator = resolve(DiscountCalculator::class);
            return $discountCalculator->discountedPrice($coupons->first() ,$price);
        }
        return $price ;

اما در

class DiscountCalculator
 public function discountedPrice(Coupon $coupon , int $amount)
    {
         dd($coupon)
       return $amount - $this->discountAmount($coupon , $amount);
    }


در این جا شما داریداز model Coupon یک نمونه جدید ایجاد می‌کنید و وقتی dd می‌گیرم این ارور را می‌دهد

Argument 1 passed to App\\Services\\Storage\\Cost\\DiscountCalculator::discountedPrice() must be an instance of App\\coupon, instance of Illuminate\\Database\\Eloquent\\Relations\\MorphMany given, called in D:\\Project_laravel\\BSA_Project\\blog\\app\\product.php on line 29 (View: D:\\Project_laravel\\BSA_Project\\blog\\resources\\views\\products\\basket.blade.php)

اما در صورتی که کد ام را به این شکل می‌زنم

 public function discountedPrice($coupon , int $amount)
    {
       return $amount - $this->discountAmount($coupon , $amount);
    }
public function discountAmount($coupon,int $amount)
{
    $discountAmount=(int)(($coupon->percent/100)*$amount);
    //dump($discountAmount);
    return $this->isExceeded($discountAmount,$coupon->limit )?$coupon->limit:$discountAmount;
}

این خطا را می‌دهد

Undefined property: Illuminate\\Database\\Eloquent\\Relations\\MorphMany::$percent (View: D:\\Project_laravel\\BSA_Project\\blog\\resources\\views\\products\\basket.blade.php)

لطفا راهنمایی کنید

سلام

لطفا فایل Couponable رو هم ارسال کنید.

مهرداد سامی ۲۸ آذر ۱۴۰۰، ۱۸:۴۰

سلام

چشم

namespace App\\Services\\Traits;
use App\\coupon;
use Carbon\\Carbon;
trait couponable{
    public function coupons()
    {
        return $this->morphmany(coupon::class,'couponable');
    }
    public function validCoupon()
    {
        return $this->coupons()->where('expire_time','>',carbon::now());
    }
}
mohammad dadkhah ۲۹ آذر ۱۴۰۰، ۰۷:۴۰

رابطه‌ای که تعریف کردید morphMany به این صورت باید نوشته شود.

مهرداد سامی ۰۵ دی ۱۴۰۰، ۰۶:۵۳