max13 / laravel-sqfix
Laravel 包修复 SQLite Schema 语法
v1.3.0
2024-03-16 00:33 UTC
Requires
- php: ^7.3|^8.0
- illuminate/contracts: ^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0
- phpunit/phpunit: ^9.3
README
SQLite
有很多怪癖,其中一些是错误,由于遗留代码、错误变成了特性等原因而保留。在他们的网站上查看完整列表。
ROWID
:每个表(除非显式创建WITHOUT ROWID
)都有一个名为rowid
的 64 位有符号整数列。此列具有与PRIMARY KEY
预期相同的属性(从1
开始,是INTEGER
,在整个表中是唯一的,通常在每次插入时增加1
),并且在某些条件下可以重用先前删除的rowid
。只有完全相同的类型(不区分大小写)的INTEGER PRIMARY KEY
才能使列成为rowid
的别名。这在大多数情况下是推荐的。AUTOINCREMENT
:当使用此关键字时,它将为rowid
使用不同的算法,简而言之,AUTOINCREMENT
将使SQLite
创建一个用于跟踪递增的表(sqlite_sequence
),rowid
保证递增且不会被重用。AUTOINCREMENT
关键字会带来额外的 CPU、内存、磁盘空间和磁盘 I/O 负担,如果非必要,则应避免使用。通常不需要。
此包替换了 SQLite
建议的默认优化行为,并且不会对其他驱动程序产生影响。Laravel
的 ids 会自动创建为 rowid
的别名,并且 ->trueSyntax()
修改器将使用“未固定的” SQL 语法。
安装
您可以通过 composer 安装此包
composer require max13/laravel-sqfix
就是这样!
使用方法
Schema::create('jobs', function (Blueprint $table) { $table->bigIncrements('id'); // … });
Laravel
的正常行为是使用以下语句定义 jobs
表
create table "jobs" ("id" integer not null primary key autoincrement)
这将创建一个名为 id
的列,与 rowid
区分开来,具有相同的属性。双倍工作量。
此包使 Laravel
生成以下表
create table "jobs" ("id" integer primary key)
优化最大
测试
composer test
贡献
请参阅 CONTRIBUTING 了解详细信息。
致谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。