【问题标题】:Laravel 9 serializeDate() Not Working on Other ColumnsLaravel 9 serializeDate() 不适用于其他列
【发布时间】:2022-12-04 20:29:16
【问题描述】:

我想返回带有时间戳数据类型的所有数据自动转换为 ISO 8601 的 json。这在 Laravel 7 之后应该很容易实现,但我仍然面临这个问题。

我创建了两列start_timeend_time,数据类型为timestamp。在以 JSON 格式返回结果时,Laravel 仅将 created_atupdated_at 转换为 ISO8601(例如2022/4/26 9:44:47).我创建的两列在存储在数据库中时返回(例如2022-01-17 19:45:07).

我在serializeDate() 中添加的任何替换默认方法的内容只会影响created_atupdated_at

我能得到的最接近的是将下面添加到我的模型中,但它在格式上仍然略有不同(例如2022/4/26 10:30:00对比2022/4/26 9:44:47).

protected $casts = [
        'start_time' => 'date:Y-m-d\TH:i:s\Z',
        'end_time' => 'date:Y-m-d\TH:i:s\Z',

    ];

【问题讨论】:

    标签: laravel laravel-9


    【解决方案1】:

    这可能无法直接回答问题,但我找到了解决方法。您可以做的是 Carbon::parse 那些在返回到 Json 之前返回为存储在数据库中的列。

    如果您要返回数据库中的所有槽,这是一个示例:

    foreach ($slots as $slot) {
         $slot->start = Carbon::parse($slot->start_time);
         $slot->end = Carbon::parse($slot->end_time);
    }
    
    return response()->json($slots);
    

    【讨论】:

      【解决方案2】:

      这仅仅是因为你需要告诉 Laravel 它应该在你的模型中考虑作为日期的列,默认情况下创建时间更新时间被考虑。

      有一个受保护的属性叫做$日期,它将所有列的数组视为日期。 serializeDate 方法负责处理该属性。

      protected $dates = [
          'reception_date',
          'response_date' ,
          '...'
      ];
      
      
      protected function serializeDate(DateTimeInterface $date)
      {
          // you may give whatever format you want
          return $date->translatedFormat('d M Y à H:i');
      }
      

      【讨论】:

        【解决方案3】:

        您可以将列转换为 dateserializeDate() 函数将自动转换您的日期列

        use DateTimeInterface;
        
        class Project extends Model
        {
            protected $casts = [
                'start_time' => 'date',
                'end_time' => 'date',
            ];
        
            protected function serializeDate(DateTimeInterface $date)
            {
                return $date->format('Y-m-d H:i:s');
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2022-07-21
          • 2021-03-10
          • 1970-01-01
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 2021-10-18
          • 2017-05-06
          • 1970-01-01
          相关资源
          最近更新 更多