yajra/laravel-oci8

Laravel 通过 OCI8 的 Oracle 数据库驱动

v11.6.2 2024-09-09 14:01 UTC

This package is auto-updated.

Last update: 2024-09-10 05:28:43 UTC


README

Build Status Total Downloads Latest Stable Version License

Laravel-OCI8

Laravel-OCI8 是 Laravel 的 Oracle 数据库驱动包。它通过使用 OCI8 扩展与 Oracle 通信,是 Illuminate/Database 的扩展。感谢 @taylorotwell。

文档

Laravel 版本兼容性

快速安装

composer require yajra/laravel-oci8:^11

服务提供者(Laravel 5.5+ 可选)

一旦 Composer 安装或更新了您的包,您需要注册 Laravel-OCI8。打开 config/app.php 并找到 providers 键,然后添加

Yajra\Oci8\Oci8ServiceProvider::class,

配置(可选)

最后,您可以选择运行以下 Artisan 命令来发布配置文件。如果不发布配置文件,包将自动使用您的 .env 文件中数据库配置声明的值。

php artisan vendor:publish --tag=oracle

这将把配置文件复制到 config/oracle.php

注意:对于 Laravel Lumen 配置,请确保您的项目中有 config/database.php 文件,并将以下配置附加到其中

'oracle' => [
    'driver'         => 'oracle',
    'tns'            => env('DB_TNS', ''),
    'host'           => env('DB_HOST', ''),
    'port'           => env('DB_PORT', '1521'),
    'database'       => env('DB_DATABASE', ''),
    'service_name'   => env('DB_SERVICE_NAME', ''),
    'username'       => env('DB_USERNAME', ''),
    'password'       => env('DB_PASSWORD', ''),
    'charset'        => env('DB_CHARSET', 'AL32UTF8'),
    'prefix'         => env('DB_PREFIX', ''),
    'prefix_schema'  => env('DB_SCHEMA_PREFIX', ''),
    'edition'        => env('DB_EDITION', 'ora$base'),
    'server_version' => env('DB_SERVER_VERSION', '11g'),
    'load_balance'   => env('DB_LOAD_BALANCE', 'yes'),
    'dynamic'        => [],
    'max_name_len'   => env('ORA_MAX_NAME_LEN', 30),
],

然后,您可以在您的 .env 文件中设置连接数据

DB_CONNECTION=oracle
DB_HOST=oracle.host
DB_PORT=1521
DB_SERVICE_NAME=orcl
DB_DATABASE=xe
DB_USERNAME=hr
DB_PASSWORD=hr

如果您要连接到包含多个主机的集群,您可以手动设置 tns 或将主机设置为逗号分隔的数组,并根据需要配置其他字段

DB_CONNECTION=oracle
DB_HOST=oracle1.host, oracle2.host
DB_PORT=1521
DB_SERVICE_NAME=orcl
DB_LOAD_BALANCE=no
DB_DATABASE=xe
DB_USERNAME=hr
DB_PASSWORD=hr

如果您需要使用服务名称而不是 tns 连接,可以使用以下配置

'oracle' => [
    'driver' => 'oracle',
    'host' => 'oracle.host',
    'port' => '1521',
    'database' => 'xe',
    'service_name' => 'sid_alias',
    'username' => 'hr',
    'password' => 'hr',
    'charset' => '',
    'prefix' => '',
]

在某些情况下,您可能希望在您的应用程序中动态设置连接参数。例如,您可能需要访问多个数据库,或者您的用户已经在 Oracle 数据库上拥有自己的账户

'oracle' => [
    'driver' => 'oracle',
    'host' => 'oracle.host',
    'port' => '1521',
    'service_name' => 'sid_alias',
    'prefix' => 'schemaowner',
    'dynamic' => [App\Models\Oracle\Config::class, 'dynamicConfig'],
]

您的应用程序中的回调函数必须是静态的,并接受对 $config[] 数组的引用(该数组将已包含配置文件中设置的值)

namespace App\Models\Oracle;

class Config {

    public static function dynamicConfig(&$config) {

        if (Illuminate\Support\Facades\Auth::check()) {
            $config['username'] = App\Oracle\Config::getOraUser();
            $config['password'] = App\Oracle\Config::getOraPass();
        }

    }
}

然后运行您的 Laravel 安装...

Oracle 最大名称长度

默认情况下,数据库对象名称限制为 30 个字符。要增加限制,您可以在您的 .env 文件中设置 ORA_MAX_NAME_LEN=128

注意:此配置需要 Oracle 12c02 或更高版本

[Laravel 5.2++] Oracle 用户提供者

当使用 Oracle 时,我们可能会遇到认证问题,因为 Oracle 查询默认情况下是大小写敏感的。通过使用此 Oracle 用户提供者,我们现在将能够在登录和忘记密码失败时避免用户问题,因为这些是由于大小写敏感的搜索。

要使用,只需更新 auth.php 配置并设置驱动为 oracle

'providers' => [
    'users' => [
        'driver' => 'oracle',
        'model' => App\User::class,
    ],
]

鸣谢

许可

麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。