kkszymanowski / laravel-6-odbc
Laravel 6的ODBC连接器
6.0.6
2022-10-24 10:59 UTC
Requires
- php: ^7.2|^8.0
- ext-pdo: *
- illuminate/container: >=6.0
- illuminate/database: >=6.0
- illuminate/support: >=6.0
README
此包受到tck/odbc的启发,但进行了简化、现代化,并使其与Laravel 6、7和8兼容。
安装
composer require kkszymanowski/laravel-6-odbc
在config/database.php
中添加数据库配置,例如
'connections' => [ 'myOdbcConnection' => [ 'driver' => 'odbc', 'dsn' => env('DB_ODBC_CONNECTION_STRING'), 'host' => env('DB_ODBC_HOST'), 'database' => env('DB_ODBC_DATABASE'), 'username' => env('DB_ODBC_USERNAME'), 'password' => env('DB_ODBC_PASSWORD'), ], // ... ],
将配置中引用的环境变量添加到您的.env
文件中,例如
DB_ODBC_CONNECTION_STRING="odbc:DRIVER=Pervasive;ServerName=192.168.0.1;DBQ=DATABASE;UID=User;PWD=Password"
DB_ODBC_HOST=192.168.0.1
DB_ODBC_DATABASE=DATABASE
DB_ODBC_USERNAME=User
DB_ODBC_PASSWORD=Password
如果您想自定义ODBC连接中使用的模式语法、查询语法或后处理器,可以通过分别扩展\Odbc\OdbcSchemaGrammar
、\Odbc\OdbcQueryGrammar
和\Odbc\OdbcProcessor
来实现。然后添加以下配置条目
'database.connections.odbc.grammar.query'
'database.connections.odbc.grammar.schema'
'database.connections.odbc.processor'
例如在config/database.php
中添加
'connections' => [ // ... 'odbc' => [ 'grammar' => [ 'query' => \App\Grammars\CustomQueryGrammar::class, 'schema' => \App\Grammars\CustomSchemaGrammar::class, ], 'processor' => \App\Processors\CustomProcessor::class, ], // ... ],
更常见的情况之一是自定义分页中使用的compileLimit()
方法和跳过方法的skip()
。您可以通过以下方式实现
use Illuminate\Database\Query\Builder; use Odbc\OdbcQueryGrammar; class CustomQueryGrammar extends OdbcQueryGrammar { /** * Compile the "limit" portions of the query. * * @param Builder $query * @param int $limit * * @return string */ protected function compileLimit(Builder $query, $limit) { return 'select top ' . (int) $limit; } }
请注意,自定义处理器在运行原始查询时不会使用,例如$connection->select('SELECT * FROM USERS')
。要使用它,您必须使用Eloquent查询构建器构建查询,例如
User::get(); DB::connection('myOdbcConnection')->table('USERS')->get();
使用
使用Eloquent
要覆盖默认数据库连接,请在您的Eloquent模型中定义$connection
名称
/** * The connection name for the model. * * @var string */ protected $connection = 'myOdbcConnection';
定义连接名称后,执行所有标准Eloquent操作
$user = User::where('id', 1)->get(); $users = User::all();
非Eloquent
您也可以不使用Eloquent模型执行查询。确保如果您不是使用默认连接,则指定连接名称,例如
$user = DB::connection('myOdbcConnection')->select('SELECT * FROM USERS WHERE id = :id', ['id' => 1]); $users = DB::connection('myOdbcConnection')->table('USERS')->where('id', 1)->get();
如果您正在运行原始查询,请确保尽可能使用参数绑定,以避免SQL注入漏洞。