首页 > 解决方案 > 在 laravel 刀片中使用范围

问题描述

我的模型中有这个范围:

public function scopeValid($query){
  return $query->where('value_from', '<=', Carbon::now()->toDateTimeString())
                ->where('value_to', '>=', Carbon::now()->toDateTimeString());
}

我想要做的是在我的刀片中显示两个文本validexpired取决于它们的value_from&value_to列,但我得到的只是两种类型的相同结果。

我获得valid了有效和过期的优惠券。

这是我尝试这样做的方法:

foreach($coupons as $coupon){
  if($coupon->Valid()){
    $validation = 'Valid';
  }else{
    $validation = 'Expired';
  }
}

我应该怎么走?

更新

my blade view

屏幕1

my database 屏幕2

my full function

public function index()
    {
      $coupons = Coupon::orderby('id', 'desc')->get();
      $categories = Category::all();

      foreach($coupons as $coupon){
        if($coupon->valid()){
          $validation = 'Valid';
        }else{
          $validation = 'Expired';
        }
      }
      return view('admin.coupons.index', compact('coupons', 'categories', 'validation'));
    }

my full model

public function scopeValid($query){
        return $query->where('value_from', '<=', Carbon::now()->toDateTimeString())
                ->where('value_to', '>=', Carbon::now()->toDateTimeString());
    }

标签: phplaravel

解决方案


在您的情况下,无需使用scope,但您可以将accessor其用作已获取的数据:

在您的模型中:

public function getIsValidAttribute()
{
  $now = Carbon::now();

  return Carbon::parse($this->value_from)->lt($now) && Carbon::parse($this->value_to)->gt($now);

}

最后调用它blade view

@foreach ($coupons as $coupon
  @if($coupon->isValid)
    <span>Valid</span>
  @else
    <span>Expired</span>
  @endif
@endforeach

推荐阅读