Laravel访问器无法在时间字段上工作

nszi6y05  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(174)

我试图在从数据库获取字段时设置字段,但相应的访问器不工作。它根本不执行。
代码如下:

迁移:

public function up(){
    Schema::table('users',function(Blueprint $table){
        $table->time('start_working_time')->nullable();
    });
}

字符串

型号:

protected $fillable = [...,'start_working_time'];

protected $casts = [
    'start_working_time' => 'datetime:H:i',
];

protected $appends = ['start_working_time'];

public function getStartWorkingTimeAttribute($date){
    return Carbon::createFromFormat('H:i:s',$date)->format('H:i');
}


我尝试过的:
1.创建迁移时将该字段设置为非空。
1.用一个下划线缩短字段名称(start_time)
1.通过“$cast”而不是使用访问器来执行
1.把它放在“$append”中
但这些方法都不管用。
有什么想法吗?

xt0899hw

xt0899hw1#

  1. $appends属性用于将新的计算属性附加到模型的数组/ JSON表单,而不是现有的列。由于start_working_time是数据库中的实际列,因此不应将其列在$appends中。请从$appends数组中删除start_working_time
    1.如果你将start_working_time转换为日期时间,Laravel已经将其作为Carbon示例返回。因此,在你的访问器中,你不需要创建另一个Carbon示例。你可以简单地格式化它:
public function getStartWorkingTimeAttribute($date){
    return $date->format('H:i');
}

字符串

相关问题