marcha / laravel-firebird
为 Laravel 框架提供的 Firebird 数据库包
Requires
- php: >=7.1
- illuminate/container: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/events: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- mockery/mockery: ~1.0
- orchestra/testbench: ~3.7|^4.0|^5.0|^6.0
- phpunit/phpunit: ~7.0|^8.0|^9.0|^10.0|^11.0
This package is auto-updated.
Last update: 2024-09-16 12:10:09 UTC
README
此包为 Laravel 应用程序添加了对 Firebird PDO 驱动的支持。支持 Laravel 5.5 到 8.x,PHP 7.1+ 以及 Firebird 1.5、2.5、3.0
安装
安装 PHP 的 Firebird PDO 驱动。
Mariuz 的博客上有非常详细的步骤: http://mapopa.blogspot.com/2009/04/php5-and-firebird-pdo-on-ubuntu-hardy.html
使用 composer 安装
composer require marcha/laravel-firebird
更新 app/config/app.php
,添加服务提供者
'Firebird\FirebirdServiceProvider'.
对于 Laravel 5.7 及以后的版本
Firebird\FirebirdServiceProvider::class,
您可以移除原始的 DatabaseServiceProvider,因为原始的连接工厂也已被扩展。
在数据库配置中声明您的连接,使用 'firebird' 作为连接类型。其他需要的键
'firebird' => [ 'driver' => 'firebird', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE','/storage/firebird/APPLICATION.FDB'), 'username' => env('DB_USERNAME', 'sysdba'), 'password' => env('DB_PASSWORD', 'masterkey'), 'charset' => env('DB_CHARSET', 'UTF8'), 'role' => 'RDB$ADMIN', 'engine_version' => '3.0.4', ],
并添加到您的 .env
DB_CHARSET=UTF8
如有必要,将 UTF8 改为任何其他字符集
此包是 jacquestvanzuydam/laravel-firebird 包的一个分支,并扩展了其功能。已在 Laravel-5.7 上测试。
添加了以下功能
- 添加了对直接控制序列的支持
// CREATE SEQUENCE "seq_users_id" Schema::createSequence('seq_users_id'); // ALTER SEQUENCE "seq_users_id" RESTART WITH 10 INCREMENT BY 5 Schema::sequence('seq_users_id', function (SequenceBlueprint $sequence) { $sequence->increment(5); $sequence->restart(10); }); // DROP SEQUENCE "seq_users_id" Schema::dropSequence('seq_users_id');
-
自动递增列的实现有两种方式
-
通过自动生成序列和插入触发器之前
// CREATE TABLE "users" ( // "id" INTEGER NOT NULL PRIMARY KEY, // "name" VARCHAR(255) NOT NULL, // "email" VARCHAR(255) NOT NULL, // "password" VARCHAR(255) NOT NULL, // "remember_token" VARCHAR(100), // "created_at" TIMESTAMP, // "updated_at" TIMESTAMP // ); // ALTER TABLE "users" ADD PRIMARY KEY ("id"); // ALTER TABLE "users" ADD CONSTRAINT "users_email_unique" UNIQUE ("email"); // CREATE SEQUENCE "seq_users"; // CREATE OR ALTER TRIGGER "tr_users_bi" FOR "users" // ACTIVE BEFORE INSERT // AS // BEGIN // IF (NEW."id" IS NULL) THEN // NEW."id" = NEXT VALUE FOR "seq_users"; // END Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); // DROP TABLE "users"; // DROP SEQUENCE "seq_users"; Schema::drop('users');
- 使用标识字段(仅限 Firebird 3.0)。
// CREATE TABLE "users" ( // "id" INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, // "name" VARCHAR(255) NOT NULL, // "email" VARCHAR(255) NOT NULL, // "password" VARCHAR(255) NOT NULL, // "remember_token" VARCHAR(100), // "created_at" TIMESTAMP, // "updated_at" TIMESTAMP // ); // ALTER TABLE "users" ADD CONSTRAINT "users_email_unique" UNIQUE ("email"); Schema::create('users', function (Blueprint $table) { $table->useIdentity(); // only Firebird 3.0 $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); });
-
InsertGetId 方法的实现类似于 postgres,即使用 RETURNING 语句。
-
创建自己的基础模型类,在该类中通过序列标识符的先前接收实现 insertAndSetId 方法。
-
添加了执行存储过程和存储函数的额外方法。
-
提供连接参数:角色的名称和 Firebird 版本(以使用正确的语法)。
致谢
此包最初是从 sim1984/laravel-firebird 分支的。
许可证
根据 MIT 许可证授权。