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

问题描述 投票:0回答:1

我试图在从数据库获取字段时设置一个字段,但相应的访问器不起作用。它根本不执行。

我的代码如下:

迁移:

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. 创建迁移时将该字段设置为非空。
  2. 用一个下划线缩短字段名称(start_time)
  3. 通过“$cast”来完成,而不是使用访问器来完成
  4. 将其放入“$append”

但是这些方法都不起作用。

请问有什么想法吗?

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