marcha/laravel-firebird

为 Laravel 框架提供的 Firebird 数据库包

dev-master 2024-06-16 11:39 UTC

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 许可证授权。