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
相关产品推荐
相关产品推荐

