ГРМ Laravel с карбоном
Я пытаюсь показать new label
в моем приложении в зависимости от времени публикации продуктов.
логика
- Показать ярлык, новый со времени публикации продукта
created_at
до20 days
после.
Код
это то, что я сделал до сих пор, но не уверен в этом.
$new = Product::where('created_at', '=<', Carbon::now()->subDays(30));
screenshot
этот ярлык должен быть показан только первые 20 дней.
Вопрос
- Как мне сделать
if statement
в моем лезвии для$new
? (Я имею в виду, я создал@if($new)...@endif
это не работает) - Мой код правильный?
ОБНОВИТЬ
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