如何在Laravel迁移中将时间戳转换为波斯历(Jalali)
在Laravel迁移中直接将时间戳转为波斯历创建视图
方法一:使用morilog/jalali的数据库原生函数
morilog/jalali包内置了数据库层面的波斯历转换函数,你可以直接在创建视图的SQL语句中调用它,实时转换created_at字段:
public function up() { DB::statement(" CREATE VIEW getStudentRegisteredInfo AS SELECT mbr_id, -- 按需求调整格式,比如仅日期用%Y/%m/%d jdate_format(created_at, '%Y/%m/%d %H:%i:%s') AS created_at_jalali FROM members "); }
方法二:结合Laravel查询构造器
如果你偏好Laravel的查询构造器语法,可通过selectRaw生成对应SQL:
use Illuminate\Support\Facades\DB; use Morilog\Jalali\Jalalian; public function up() { $viewQuery = DB::table('members') ->select( 'mbr_id', DB::raw("jdate_format(created_at, '".Jalalian::DEFAULT_FORMAT."') AS created_at_jalali") ); DB::statement("CREATE VIEW getStudentRegisteredInfo AS {$viewQuery->toSql()}"); }
关键注意事项
- 确保
morilog/jalali已正确安装配置,若数据库未加载相关自定义函数,可运行php artisan jalali:publish完成注册。 - 可根据业务需求修改日期格式参数,比如
%Y-%m-%d或%d %B %Y(波斯历月份名称)。 - 若需要保留原时间戳,可同时返回
created_at和转换后的created_at_jalali字段。
回滚迁移配置
在迁移的down方法中添加视图删除逻辑:
public function down() { DB::statement("DROP VIEW IF EXISTS getStudentRegisteredInfo"); }
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

