外观
迁移字段与索引(LimsSchema)
对齐遗留 huayan/app/auto_patch + LIMS_Base 的国产库/MySQL 版本差异,beta 新表迁移统一用本套辅助。
检测
DatabaseCapabilities 读取:
config('legacy.db.legacy_dbtype')(来自.envs的dbtype)Schema::getConnection()->getDriverName()(mysql/dm/pgsql/kingbase)- MySQL 时
getServerVersion()(5.5 vs 5.6+)
迁移写法
php
Schema::create('example', function (Blueprint $table) {
$table->id();
$table->string('name', 64);
$table->text('payload')->nullable();
// 时间:自动 datetime/timestamp + useCurrent
$table->limsCreatedAt();
$table->limsUpdatedAt(); // 可空,应用维护
$table->limsUpdateTime(); // 遗留 update_time;dm 需额外触发器
// JSON:MySQL 用 json,达梦/金仓用 text
$table->limsNullableJson('meta');
// 索引:达梦对 text/clob 列可传 types 跳过
$table->limsIndex(['name', 'created_at'], 'example_idx_name_time');
$table->limsIndexes([
['name' => 'example_idx_biz', 'columns' => ['biz_type', 'biz_id']],
]);
$table->limsFullText(['title']); // 非 MySQL 自动跳过
});up() 末尾若使用 limsUpdateTime() 且为达梦:
php
LimsSchema::applyDamengUpdateTimeTrigger('example');down():
php
LimsSchema::dropDamengUpdateTimeTrigger('example');规则摘要
| 项 | MySQL ≥5.6 | MySQL 5.5 | 达梦 dm | 瀚高 hg | 金仓 kdb |
|---|---|---|---|---|---|
| 连接 | mysql | mysql | dm + dmlaravel | pgsql: | kdb: + KingbaseGrammar |
| 默认时间列 | datetime | timestamp | Grammar | timestamp/datetime | 同 PG 系 |
| ON UPDATE | 支持 | 单列限制 | 触发器 | 应用层 | 应用层(Grammar 忽略 ON UPDATE) |
| FULLTEXT | 支持 | 支持 | 跳过 | 跳过 | 跳过 |
| text 列索引 | 慎用 | 慎用 | 跳过(传 types) | 慎用 | 跳过(传 types,同达梦策略) |
金仓(dbtype=kdb)
- 不能改用
DB_CONNECTION=pgsql;必须kingbase连接 + 金仓kdbPDO 扩展。 - Schema:
KingbaseConnection+KingbaseSchemaGrammar(继承 PostgresGrammar)。 - 连接后执行
set sql_mode=''(对齐ksqli.php)。 - 迁移继续用
limsCreatedAt/limsIndex;limsUpdateTime不会生成 ON UPDATE。 - 业务 SQL 的 MySQL 函数改写仍在遗留
ksqli.php层,Laravel 查询层后续可再封装。
类位置
App\Foundation\Schema\DatabaseCapabilitiesApp\Foundation\Schema\LimsSchema- 宏注册:
App\Providers\LimsSchemaServiceProvider