yoramdelangen/laravel-pdo-odbc

Laravel框架的PDO ODBC/Snowflake集成。支持ODBC和原生PDO Snowflake。

1.2.5 2024-08-07 11:23 UTC

README

此仓库提供ODBC/Snowflake与Laravel Eloquent的无缝集成。它的目标是创建一个全面的Laravel ODBC包,同时也是一个独立的解决方案。

odbc_*函数不同,此包使用PDO类,从而实现与Eloquent更平滑、更便捷的集成。

此包的主要目标是提供一个标准化的方法来连接ODBC连接。它支持自定义语法和模式,以适应各种ODBC连接,如Snowflake。

安装方法

在继续之前,请确保您的系统已安装PHP 8.x版本。

要将包添加到您的项目中,请运行以下命令

composer require yoramdelangen/laravel-pdo-odbc

默认情况下,包将通过package:discover命令自动注册。

或者,您可以在app.php文件中手动注册服务提供者

'providers' => [
  // ...
  LaravelPdoOdbc\ODBCServiceProvider::class,
];

如果您打算使用snowflake_pdo PHP扩展,请按照以下安装指南进行设置。

从版本1.2.0开始,该包包括对snowflake_pdo的支持,但它仍然可以通过ODBC(通过ODBC)在没有Snowflake扩展的情况下运行。

配置

可用的驱动程序类型包括

  • ODBC(通用)
  • Snowflake(通过ODBC和PHP扩展的本地方式)
  • ...

Snowflake特定环境变量

您可以使用以下参数自定义Snowflake驱动程序

# When set to `false`, column names are automatically uppercased.
SNOWFLAKE_COLUMNS_CASE_SENSITIVE=false

# When set to `true`, column names are wrapped in double quotes and their
# case is determined by the input.
SNOWFLAKE_COLUMNS_CASE_SENSITIVE=true

用法

配置包非常简单

将数据库配置添加到database.php

从版本1.2开始,我们建议使用原生的Snowflake扩展而不是ODBC,但我们仍将支持它。

'snowflake_pdo' => [
    'driver' => 'snowflake_native',
    'account' => '{account_name}.eu-west-1',
    'username' => '{username}',
    'password' => '{password}',
    'database' => '{database}',
    'warehouse' => '{warehouse}',
    'schema' => 'PUBLIC', // change it if necessary.
    'options' => [
        // Required for Snowflake usage
        \PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => \PDO::ODBC_SQL_USE_DRIVER
    ]
],

您有多种方法配置ODBC连接

  1. 仅使用DSN的简单配置

    'odbc-connection-name' => [
        'driver' => 'odbc',
        'dsn' => 'OdbcConnectionName', // odbc: will be prefixed
        'username' => 'username',
        'password' => 'password'
    ]

    或者,如果您在ODBC管理器中未配置数据源

    'odbc-connection-name' => [
        'driver' => 'odbc',
        'dsn' => 'Driver={Your Snowflake Driver};Server=snowflake.example.com;Port=443;Database={DatabaseName}',
        'username' => 'username',
        'password' => 'password'
    ]

    注意:DSN Driver参数可以是驱动程序文件的绝对路径或注册在odbcinst.ini文件/ODBC管理器中的名称。

  2. 动态配置

    'odbc-connection-name' => [
        'driver' => 'snowflake',
        // please change this path accordingly your exact location
        'odbc_driver' => '/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib',
        // 'odbc_driver' => 'Snowflake path Driver',
        'server' => 'host.example.com',
        'username' => 'username',
        'password' => 'password',
        'warehouse' => 'warehouse name',
        'schema' => 'PUBLIC', // most ODBC connections use the default value
    ]

    除了driverodbc_driveroptionsusernamepassword之外的所有字段都将动态添加到DSN连接字符串中。

    注意:DSN odbc_driver参数可以是驱动程序文件的绝对路径或注册在odbcinst.ini文件/ODBC管理器中的名称。

Eloquent ORM

您可以使用Laravel、Eloquent ORM和其他Illuminate组件,就像平常一样。

# Facade
$books = DB::connection('odbc-connection-name')
            ->table('books')
            ->where('Author', 'Abram Andrea')
            ->get();

# ORM
$books = Book::where('Author', 'Abram Andrea')->get();

故障排除和更多信息

我们已经记录了与Snowflake ODBC驱动程序相关的所有奇怪行为。如果遇到麻烦或奇怪的消息,请查看以下链接

自定义