AdonisJS 5查询Employees表时如何将dob列格式化为YYYY-MM-DD
在AdonisJS 5中格式化
Employees表的dob字段为YYYY-MM-DD格式 下面提供几种实用的实现方式,根据你的业务场景选择即可:
方法1:在模型中针对单个字段配置序列化
通过Lucid模型的@column.date()装饰器的serialize回调,直接指定该字段的输出格式,这种方式只作用于当前字段,灵活性高。
// app/Models/Employee.ts import { DateTime } from 'luxon' import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm' export default class Employee extends BaseModel { @column({ isPrimary: true }) public id: number @column() public name: string // 为dob字段指定序列化格式 @column.date({ serialize: (value: DateTime) => value.toFormat('yyyy-MM-dd') }) public dob: DateTime }
方法2:自定义模型序列化逻辑
如果需要同时处理多个日期字段,或者要对模型输出做更多自定义,可以重写模型的serialize方法:
// app/Models/Employee.ts import { DateTime } from 'luxon' import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm' export default class Employee extends BaseModel { @column({ isPrimary: true }) public id: number @column() public name: string @column.date() public dob: DateTime @column.date() public join_date: DateTime // 重写序列化方法,统一处理日期字段 public serialize() { const serialized = super.serialize() // 格式化dob和join_date serialized.dob = this.dob.toFormat('yyyy-MM-dd') serialized.join_date = this.join_date.toFormat('yyyy-MM-dd') return serialized } }
方法3:查询时通过数据库函数格式化
直接在数据库查询阶段完成格式化,适合不需要模型实例、追求性能的场景,不同数据库的函数语法略有区别:
MySQL 示例
// 控制器代码 import Database from '@ioc:Adonis/Lucid/Database' export default class EmployeesController { public async index() { const employees = await Database.from('employees') .select( 'id', 'name', Database.raw('DATE_FORMAT(dob, "%Y-%m-%d") as dob') ) return employees } }
PostgreSQL 示例
// 控制器代码 import Database from '@ioc:Adonis/Lucid/Database' export default class EmployeesController { public async index() { const employees = await Database.from('employees') .select( 'id', 'name', Database.raw('TO_CHAR(dob, \'YYYY-MM-DD\') as dob') ) return employees } }
方法4:全局统一日期格式
如果项目中所有日期字段都需要输出YYYY-MM-DD格式,可以修改全局配置:
// config/app.ts export default { // ...其他配置项 dateFormat: 'yyyy-MM-dd', }
注意:全局配置会覆盖所有默认序列化的日期字段,如果有个别字段需要特殊格式,需单独用方法1或2处理。
内容的提问来源于stack exchange,提问作者NITISH KUMAR Jha
相关产品推荐
相关产品推荐

