【发布时间】:2020-11-26 16:50:11
【问题描述】:
我有这 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;
}
这是 Coponable:
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#1 和 dd#2 中的说明到达 dd 并得到以下结果:
dd($categories->first()->validCoupons());
对于 dd#2:
dd($coupons->first());
【问题讨论】:
标签: laravel eloquent many-to-many