在雄辩模型中使用时间字段

时间:2019-02-05 10:38:02

标签: laravel laravel-5 eloquent laravel-5.7

我有一个仅包含时间的数据库字段,在我的迁移中声明为

$table->time('time')->default('00:00:00');

现在,我想使用Eloquent在此字段中添加几秒钟的信息,

$activetime->time->add(new DateInterval('PT5S'));

(其中$ activetime是雄辩模型的对象)

首先尝试一下我得到的

Call to a member function add() on string

因此,显然我必须告诉Eloquent,这不是字符串而是时间。我得到的最接近的结果是将其放入模型中受保护的$ dates中,但是相反,我得到了

Unexpected data found.

我怀疑这是因为它实际上不是日期,而只是时间,但是我似乎找不到太多有关如何处理时间的信息。有什么方法可以解决这个问题,还是我可以使用其他一些更好的方法,例如dateTime或timestamp(甚至是整数表示秒数)?我要记录的是用户在给定日期的活动时间量,因此为此目的,时间似乎是自然的选择...

1 个答案:

答案 0 :(得分:1)

这是因为Laravel仅将time读取string数据库类型,并且您期望使用DateTime Object

将此添加到您的口才模型中

public function getTimeAttribute($value)
{
    return new \DateTime($value);
}

您还可以使用Laravel Attribute Castingtime强制转换为DateTime Object,但是由于Laravel期望格式正确,因此您必须在时间上加上一些日期