You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中日期值如何格式化?插入数据库报字段不存在错误如何解决

问题排查及解决方法

1. 核心报错原因

你当前的报错和日期格式化没有直接关系,是两个基础配置错误导致的:

  • 操作的表不匹配:你描述中需要操作存储歌曲的song表,但代码里操作的是users用户表,两个表的字段结构完全不一样,自然找不到Year字段
  • 字段名大小写不匹配:你说明song表里的字段是小写year,但代码里写的是大写Year,MySQL在大部分部署环境(Linux/macOS)下对表名、字段名大小写敏感,写法不一致会被识别为不同字段

2. 修正后的代码示例

如果你要向song表插入数据,首先要确保你已经创建了对应Song模型,或者直接用DB门面操作song表:

// 直接操作song表示例
DB::table('songs')->insert([
    'name' => 'Appetite for destruction',
    // 字段名和表结构保持一致用小写year
    'year' => '1987-11-11',
    'created_at' => now(),
    'updated_at' => now()
]);

// 用Song模型插入的示例
Song::create([
    'name' => 'Appetite for destruction',
    'year' => '1987' // 如果year字段类型是YEAR,只传4位年份即可
]);

3. PHP中日期格式化的常用方法

如果后续需要处理日期格式转换,可以用以下两种常用方式:

原生PHP方法

使用date()配合strtotime()处理:

// 把任意日期字符串转成Y-m-d格式
$formatDate = date('Y-m-d', strtotime('1987年11月11日'));
// 输出 1987-11-11

// 如果只需要年份
$year = date('Y', strtotime('1987-11-11'));
// 输出 1987

Laravel框架Carbon扩展方法

你当前使用的是Laravel框架,自带Carbon日期处理库,使用更便捷:

use Carbon\Carbon;

// 转Y-m-d格式
$formatDate = Carbon::parse('1987-11-11')->toDateString();

// 只取年份
$year = Carbon::parse('1987-11-11')->year;

4. 字段类型选择建议

如果year字段仅需要存储发行年份,建议直接把字段类型设为YEAR,仅需要存储4位数字,占用空间更小,查询效率更高,插入时直接传四位年份值即可。

内容的提问来源于stack exchange,提问作者NoLuckCollector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:24:07