Laravel迁移通过Schema Builder提供丰富的字段类型与修饰符,如increments、string、json、timestamp等定义表结构,结合nullable、default、index、foreignId等方法配置字段属性和外键约束,支持MySQL、PostgreSQL、SQLite主流数据库,推荐使用跨平台兼容类型以确保迁移一致性,掌握这些可高效管理数据库 schema。

在Laravel中,使用迁移(Migration)来管理数据库结构是标准做法。Laravel的迁移功能基于PHP代码定义数据库表结构,使得团队协作和版本控制更加高效。其中,字段类型的定义通过Schema Builder提供的方法完成。以下是Laravel迁移中常用的数据类型汇总,适用于主流数据库(如MySQL、PostgreSQL、SQLite等),以帮助开发者快速查阅和使用。
常见字段类型(Column Types)
Laravel迁移中通过$table->类型名()的方式添加字段,以下是最常用的字段类型:
- increments('id'):自增整数,主键,默认unsigned,等同于MySQL的INT AUTO_INCREMENT
- bigIncrements('id'):大整数自增主键,对应BIGINT
- integer('votes'):普通整数(INT)
- tinyInteger('status'):小整数(TINYINT),常用于状态字段
- smallInteger('level'):短整数(SMALLINT)
- mediumInteger('quantity'):中等整数(MEDIUMINT,MySQL特有)
- bigInteger('account_id'):大整数(BIGINT)
- unsignedInteger('user_id'):无符号整数
- unsignedBigInteger('parent_id'):无符号大整数,常用于外键
- float('amount', 8, 2):浮点数,支持指定总位数和小数位
- double('price', 10, 4):双精度浮点数
- decimal('total', 12, 2):高精度小数,适合金额存储
- boolean('is_active'):布尔值,存储0或1
- string('name', 100):可变字符串,支持指定长度,默认255
- text('description'):长文本(TEXT)
- mediumText('content'):中等长度文本(MEDIUMTEXT)
- longText('article'):超长文本(LONGTEXT)
- char('country_code', 2):定长字符串
- enum('status', ['active', 'inactive']):枚举类型,仅限支持数据库(如MySQL)
- set('tags', ['news', 'hot', 'featured']):集合类型(MySQL特有)
- json('options'):JSON字段,用于存储结构化数据
- jsonb('meta'):PostgreSQL中的二进制JSON类型,查询效率更高
- date('created_at'):日期字段(Y-m-d)
- dateTime('published_at'):日期时间(Y-m-d H:i:s)
- dateTimeTz('sent_at'):带时区的日期时间
- time('start_time'):时间字段(H:i:s)
- timeTz('local_time'):带时区的时间
- timestamp('updated_at'):时间戳,常自动维护
- timestampTz('checked_at'):带时区的时间戳
- binary('photo'):二进制数据,用于存储文件内容
- uuid('activation_token'):UUID字段,常用于唯一标识符
- ipAddress('visitor_ip'):IP地址字段,自动验证格式
- macAddress('device_mac'):MAC地址字段
字段修饰符(Column Modifiers)
在定义字段后,可以链式调用修饰符进一步配置字段行为:
- ->nullable():允许字段为NULL
- ->default($value):设置默认值
- ->unsigned():设置为无符号(用于整数和主键关联)
- ->comment('描述信息'):添加字段注释
- ->first():将字段置于表的第一列(MySQL)
- ->after('field_name'):指定字段位置(MySQL)
- ->unique():添加唯一索引
- ->index():添加普通索引
- ->primary():设置为主键
- ->foreign():定义外键关系(需配合foreignId使用)
外键与索引支持
Laravel提供了便捷的方法处理外键约束:
PhpLeft diversification Management System(中文名为:PHPLEFT多元化管理系统),是全球第一家D时代网站管理系统,根据模型创建栏目,栏目自由扩展字段,操作简便,简单易懂的标签系统,让建站更简单,适合建各类型站点。 phpleftdms 企业网站管理系统 2.1 更新: 数据库管理功能优化
- $table->foreignId('user_id')->constrained():定义外键字段并自动关联users表
- ->onDelete('cascade'):删除主记录时级联删除
- ->onUpdate('cascade'):更新主键时同步更新
- $table->index(['email', 'status']):创建复合索引
特殊类型与数据库兼容性
某些类型依赖具体数据库引擎支持:
- MySQL支持:
set、geometry、point、linestring等空间类型 - PostgreSQL支持:
jsonb、cidr、inet、macaddr - SQLite对部分类型(如unsigned)模拟实现,实际存储可能不同
建议在项目中统一使用跨平台兼容的类型,避免迁移时出错。
基本上就这些,掌握这些字段类型和修饰符,就能高效构建Laravel应用的数据库结构。实际开发中结合php artisan make:migration命令和Schema语法,可快速实现数据表管理。不复杂但容易忽略细节,比如unsigned与外键匹配问题,需特别注意。









