yoramdelangen / laravel-pdo-odbc
Laravel框架的PDO ODBC/Snowflake集成。支持ODBC和原生PDO Snowflake。
Requires
- php: ^7.4|^8.0
- illuminate/database: >= 7.0
- illuminate/support: >= 7.0
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连接
-
仅使用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管理器中的名称。 -
动态配置
'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 ]
除了
driver
、odbc_driver
、options
、username
和password
之外的所有字段都将动态添加到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驱动程序相关的所有奇怪行为。如果遇到麻烦或奇怪的消息,请查看以下链接