🔥 با کمک هوش مصنوعی در کمتر از 6 ماه فول‌استک شوید ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ استاد بی بی ناز قهرمانیان
متود 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());
    }
}
استاد بی بی ناز قهرمانیان ۲۹ آذر ۱۴۰۰، ۰۷:۴۰

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

رحیم ملایری ۰۵ دی ۱۴۰۰، ۰۶:۵۳