我想要一个未来的时间戳来进行比赛'在我的表中过期。我可以毫无问题地输入时间,除非我检索输入时它似乎没有给我一个碳实例但只是一个带有时间的字符串?
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');
}
这就是我用来创建新竞赛的时间,表格中的时间格式与created_at和updated_at字段完全相同。当我尝试类似的东西时,他们似乎返回了一个Carbon实例:
$contest->created_at->diffForHumans()
为什么我没有退回碳实例?
我的迁移文件如下所示:
$table->timestamps();
$table->timestamp('ends_at');
答案 0 :(得分:16)
您只需将其添加到模型中的$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'
答案 1 :(得分:2)
Laravel仅将其默认时间戳转换为 Carbon (created_at
,modified_at
)。对于任何其他时间戳(例如您的ends_at
列),您可以在Contest
模型中定义属性访问者:
public function getEndsAtAttribute($value)
{
return Carbon::createFromTimeStamp(strtotime($value));
}
当您致电datetime
时,这会将从数据库返回的Carbon
字符串转换为$contest->ends_at
个实例。