我的表中有一个带有created_at和updated_at的时间戳记
$table->timestamps();
但是我想添加另一列以天为单位来计算created_at和updated_at之间的差异
我应该在SQL还是在控制器中执行此操作?
您可以从Eloquent模型中做到这一点。假设您的模型名为User。您可以通过定义创建一个计算字段访问器。
User
class User extends Model { $dates = [ 'updated_at', 'created_at' ]; $appends = ['diffInDays']; public function getDiffInDaysAttribute() { if (!empty($this->created_at) && !empty($this->updated_at)) { return $this->updated_at->diffInDays($this->created_at); } } }
通过添加created_at和updated_at到$dates数组,Laravel自动将您的日期值转换为Carbon。现在,如果执行类似的操作$user->created_at,则不会得到字符串,而是该日期的Carbon实例。这样您就可以进行一些不错的日期计算,例如上面的计算。
created_at
updated_at
$dates
$user->created_at
通过添加带有此getDiffInDaysAttribute功能的访问器$user->diffInDays,尽管模型中没有此属性,但您可以通过像普通属性一样调用日期差。
getDiffInDaysAttribute
$user->diffInDays
但是,如果您现在要做类似的操作$user->toArray(),则该diffInDays属性将不可用。要在获取用户数据时总是增加天数差异,可以将字段添加到$appends数组中。这样,当您通过Eloquent检索用户数据时,将始终返回该字段。
$user->toArray()
diffInDays
$appends