ГРМ Laravel с карбоном

Я пытаюсь показать new label в моем приложении в зависимости от времени публикации продуктов.

логика

  1. Показать ярлык, новый со времени публикации продукта created_at до 20 days после.

Код

это то, что я сделал до сих пор, но не уверен в этом.

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

screenshot

screenone

этот ярлык должен быть показан только первые 20 дней.

Вопрос

  1. Как мне сделать if statement в моем лезвии для $new? (Я имею в виду, я создал @if($new)...@endif это не работает)
  2. Мой код правильный?

ОБНОВИТЬ

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: я должен добавить, я добавил код ниже Ответ на мою модель на основе Кеслера даже на моей обычной коллекции, такой как $products = Product::all(); выдает ту же ошибку.

error

Undefined property: stdClass::$new 

model

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

2 ответа

Решение

Добавьте это к вашему Product модель:

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

Тогда в клинке вы можете сделать @if($product->new) во время обработки продуктов.

В контроллере на основе созданной даты установите новую переменную, т.е. $isNew

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

И перейти к виду. В связи с этим просто проверьте, что

@if($isNew)?.....@ ENDIF

или вы можете сделать прямое сравнение ввиду

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

// разместите ваш HTML здесь

@endif
Другие вопросы по тегам