php - 在 laravel 刀片中使用范围
问题描述
我的模型中有这个范围:
public function scopeValid($query){
return $query->where('value_from', '<=', Carbon::now()->toDateTimeString())
->where('value_to', '>=', Carbon::now()->toDateTimeString());
}
我想要做的是在我的刀片中显示两个文本valid
或expired
取决于它们的value_from
&value_to
列,但我得到的只是两种类型的相同结果。
我获得valid
了有效和过期的优惠券。
这是我尝试这样做的方法:
foreach($coupons as $coupon){
if($coupon->Valid()){
$validation = 'Valid';
}else{
$validation = 'Expired';
}
}
我应该怎么走?
更新
my blade view
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());
}
解决方案
在您的情况下,无需使用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
推荐阅读
- javascript - Node 和 React js 中 Web 应用程序的消息翻译方法
- python - 完善如何等待外部依赖
- swift - Apple 开发者 SwiftUI 教程的预览问题 - 与 UIKit 的框架集成接口
- r - 在具有不同条数的ggplot堆叠条形图中保持恒定条形宽度
- xslt-1.0 - 如何在页面 xsl fo 上将行保持在一起?
- perl - 如何在 perl 中运行多个测试脚本,并从另一个脚本中提供参数?
- android - 收入猫购买
- python - 使用 input() 创建一个程序以在 python 中绘制 excel 数据以选择文件
- mysql - MySQL查询返回错误的行数?
- python - 如何将字符串转换为日期格式