Я хочу иметь будущую временную метку для «конкурсов», срок действия которой истекает в моей таблице. Я могу ввести время без каких-либо проблем, за исключением того, что когда я получаю данные, они не возвращают мне углеродный экземпляр, а просто строку со временем?
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');
Все, что вам нужно сделать, это добавить его в $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'
Laravel только преобразует свои временные метки по умолчанию в углерод (created_at
, modified_at
). Для любых других временных отметок (таких как ends_at
столбец) вы можете определить аксессор свойства в вашем Contest
модель:
public function getEndsAtAttribute($value)
{
return Carbon::createFromTimeStamp(strtotime($value));
}
Это преобразует datetime
строка возвращается из базы данных в Carbon
случай, когда вы звоните $contest->ends_at
,