У меня есть эти 3 модели:
продукт
class Product extends Model
{
public function categories()
{
return $this->belongsToMany(Category::class);
}
public function getPriceAttribute($price)
{
$categories=$this->categories;
//dd($categories->first()->validCoupons()); //dd#1
$coupons =collect(new Coupon);
foreach($categoriesas $category){
$coupons->add($category->validCoupons());
}
//dd($coupons->first()); //dd#2
if ($coupons->isNotEmpty()){
$discountCalculator = resolve(DiscountCalculator::class);
return $discountCalculator->discountedPrice($coupons->first() ,$price);
}
return $price ;
}
}
Купон
class Coupon extends Model
{
public function isExpired()
{
return Carbon::now()->isAfter(Carbon::parse($this->expire_time));
}
}
Категория
class Category extends Model
{
use Couponable;
}
, и это Совместимо:
trait Couponable
{
public function coupons()
{
return $this->morphMany(Coupon::class , 'couponable');
}
public function validCoupons()
{
return $this->coupons->where('expire_time' , '>' , Carbon::now());
}
}
, но я получаю такую ошибку:
Аргумент 1, переданный в App \ Support \ Discount \ DiscountCalculator :: discountedPrice (), должен быть экземпляр App \ Coupon, экземпляр Illuminate \ Database \ Eloquent \ Collection задан
Я попадаю в dd, как указано в вопросе dd # 1 и dd # 2, и получаю следующие результаты:
dd($categories->first()->validCoupons());
and for dd#2:
dd($coupons->first());
второй результат dd