Laravel ГРМ с карбоном - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь отобразить 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: я должен добавить, я добавил код ниже Основываясь на ответе 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 голосов
/ 25 мая 2018

В контроллере на основе созданной даты установите новую переменную, т. Е. $ 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
0 голосов
/ 25 мая 2018

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

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

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

...