Laravel用碳计时

时间:2018-05-25 16:42:43

标签: laravel php-carbon

我尝试在我的应用中显示new label,具体取决于产品发布时间。

逻辑

  1. 自产品发布时间created_at20 days之后显示新标签。
  2. 代码

    这是我到目前为止所做的,但不确定。

    $new = Product::where('created_at', '=<', Carbon::now()->subDays(30));
    

    screenshot

    screenone

    此标签必须仅在前20天显示。

    问题

    1. 如何在if statement的刀片中制作$new? (我的意思是我创建了@if($new)...@endif它没有工作)
    2. 我的代码是否正确?
    3. 更新

      my page controller

      $products = DB::table('products')
                    ->join('page-views','products.id','=','page-views.visitable_id')
                    ->select(DB::raw('count(visitable_id) as count'),'products.*')
                    ->groupBy('id')
                    ->orderBy('count','desc')
                    ->having('count', '>=', 100)
                    ->get();
      

      PS:我必须在我的模型中添加基于Quezler回答下面添加的代码,即使在$products = Product::all();这样的普通集合中也会出现同样的错误。

      error

      Undefined property: stdClass::$new 
      

      model

      public function getNewAttribute(): boolean
          {
              return (clone $this->created_at)->addDays(20)->greaterThanOrEqualTo(Carbon::now());
          }
      

2 个答案:

答案 0 :(得分:1)

将此添加到您的Product型号:

public function getNewAttribute(): bool
{
    return (clone $this->created_at)->addDays(20)->greaterThanOrEqualTo(Carbon::now());
}

然后在刀片中,您可以在处理产品时@if($product->new)

答案 1 :(得分:1)

在控制器的基础上创建日期设置一个新变量,即$ isNew

$created = new Carbon($products->created_at);
$now = Carbon::now();
$isNew = ($created->diff($now)->days < 20)? True: FALSE;

并转到视图。在视图中只需检查

@if($是否新款)?..... @ ENDIF

或者您可以在视图中进行直接比较

@if(\Carbon\Carbon::now()->diffInDays($product->created_at, false) < 20)

//将您的HTML放在这里

@endif