Как внедрить пользовательскую углеродную метку времени Laravel?

Я хочу иметь будущую временную метку для «конкурсов», срок действия которой истекает в моей таблице. Я могу ввести время без каких-либо проблем, за исключением того, что когда я получаю данные, они не возвращают мне углеродный экземпляр, а просто строку со временем?

public function store(ContestRequest $request)
{
$input = Request::all();

// Set the 'owner' attribute to the name of the currently logged in user(obviously requires login)
$input['owner'] = Auth::user()->name;

// Set the enddate according to the weeks that the user selected with the input select
$weeks = Request::input('ends_at');

// Add the weeks to the current time to set the future expiration date
$input['ends_at'] = Carbon::now()->addWeeks($weeks);

Contest::create($input);

return redirect('contests');
}

Это то, что я использую для создания нового конкурса, формат времени в таблице точно такой же, как у полей create_at и updated_at. Кажется, они возвращают экземпляр Carbon, когда я пытаюсь что-то вроде:

$contest->created_at->diffForHumans()

Почему я не получаю углеродный экземпляр?

Мой файл миграции выглядит так:

$table->timestamps();
$table->timestamp('ends_at');

2

Решение

Все, что вам нужно сделать, это добавить его в $dates собственность в вашей модели.

class Contest extends Model {
protected $dates = ['ends_at'];
}

Это говорит Laravel, чтобы относиться к вашему ends_at приписывать так же, как он обрабатывает updated_at а также created_at


@Jakobud Вам не нужно беспокоиться о переопределении created_at а также updated_at, Они будут объединены с $dates массив:

public function getDates()
{
$defaults = array(static::CREATED_AT, static::UPDATED_AT);
return array_merge($this->dates, $defaults);
}

static::CREATED_AT решает в 'created_at' а также static::UPDATED_AT в 'updated_at'

16

Другие решения

Laravel только преобразует свои временные метки по умолчанию в углерод (created_at, modified_at). Для любых других временных отметок (таких как ends_at столбец) вы можете определить аксессор свойства в вашем Contest модель:

public function getEndsAtAttribute($value)
{
return Carbon::createFromTimeStamp(strtotime($value));
}

Это преобразует datetime строка возвращается из базы данных в Carbon случай, когда вы звоните $contest->ends_at,

2

По вопросам рекламы [email protected]