Формат created_at datetime с использованием Carbon и отображение результата в лезвии laravel

Я пытаюсь отобразить created_at дату и время как a minute ago, используя Carbon внутри моего файла лезвия laravel. Я использую vue.js для отображения данных, но не работаю.

Контроллер:

public function data()
    {
        $projects = Project::get();
        return [
            'created' => $projects->created_at->diffForHumans()
        ];
        return \Response::json($projects);
    }

Блейд с vue:

<tr v-for="Project in Projects">
     <td>@{{ Project.id }}</td>
     <td>@{{ Project.thumb }}</td>
     <td>@{{ Project.name }}</td>
     <td>@{{ Project.active }}</td>
     <td>@{{ Project.created_at }}</td>
</tr>

Ошибка:

Неопределенное свойство: Illuminate\Database\Eloquent\Collection::$created_at

Я также пробовал:

foreach ($projects as $project) {
     return [
          'created' => $project->created_at->diffForHumans()
     ];
}

и он отображает то, что я искал, но показывает только одни данные.


person claudios    schedule 22.03.2017    source источник


Ответы (3)


Вы пишете прямо в лезвии, чтобы получить удобочитаемый формат.

{{\Carbon\Carbon::createFromTimeStamp(strtotime($Project.created_at))->diffForHumans()}}
person Tukadiya Ramesh    schedule 05.01.2018

У меня есть решение, которое вы можете использовать где угодно с атрибутом приведения. Проверьте код ниже

<?php

namespace App\Casts;

use Carbon\Carbon;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class CreateAtCast implements CastsAttributes
{
    /**
     * Transform the attribute from the underlying model values.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return mixed
     */
    public function get($model, string $key, $value, array $attributes)
    {
        $date = Carbon::parse($value)->diffForHumans();
        return $date;
    }

    /**
     * Transform the attribute to its underlying model values.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return array
     */
    public function set($model, string $key, $value, array $attributes)
    {
        return $value;
    }
}

модальный


<?php

namespace App;

use App\Casts\CreateAtCast;

class Project extends Model
{

    protected $casts = [
        'created_at'        => CreateAtCast::class,
    ];

    protected $dates = ['created_at', 'updated_at'];
}


затем напрямую используйте project.create_at

person Deep Khicher    schedule 18.04.2020

Я предпочитаю не форматировать сам create_at, а вместо этого создать его копию внутри вашей модели и использовать ее в любое время.

Итак, в вашей модели User.php:

protected $appends = ['created_date'];

Создайте мутатор атрибута:

public function getCreatedDateAttribute()
{
    return $this->created_at->diffForHumans();
}

Пример вывода

10 seconds ago
person Kreativ James    schedule 30.06.2020