This intergrates almost natively with Laravel Eloquent. Its a fork from abram/laravel-odbc
to make it standalone next the illuminate/database
without Laravel. But it will run with Laravel.
This package does not use the odbc_*
functions, but the PDO
class to make the intergration with eloquent much easier and more flawless.
composer require yoramdelangen/laravel-pdo-odbc
To add source in your project
It's very simple to configure:
1) Add database to database.php file
'odbc-connection-name' => [
'driver' => 'odbc',
'dsn' => 'OdbcConnectionName', // odbc: will be prefixed
'database' => 'DatabaseName',
'host' => '127.0.0.1',
'username' => 'username',
'password' => 'password'
]
or when you do not have a datasource configured within your ODBC Manager:
'odbc-connection-name' => [
'driver' => 'odbc',
'dsn' => 'Driver={Your Snowflake Driver};Server=snowflake.example.com;Port=443', // odbc: will be prefixed
'database' => 'DatabaseName',
'host' => '127.0.0.1',
'username' => 'username',
'password' => 'password'
]
It showcases an example of using Snowflake.
2) Add service provider in app.php file
'providers' => [
...
LaravelPdoOdbc\ODBCServiceProvider::class
]
You can use Laravel, Eloquent ORM and other Illuminate's components as usual.
# Facade
$books = DB::connection('odbc-connection-name')->table('books')->where('Author', 'Abram Andrea')->get();
# ORM
$books = Book::where('Author', 'Abram Andrea')->get();
If you want to provide a custom getLastInsertId() function, you can extends ODBCProcessor class and override function.
class CustomProcessor extends ODBCProcessor
{
/**
* @param Builder $query
* @param null $sequence
* @return mixed
*/
public function getLastInsertId(Builder $query, $sequence = null)
{
return $query->getConnection()->table($query->from)->latest('id')->first()->getAttribute($sequence);
}
}
To use another class instead default one you can update your connection in:
'odbc-connection-name' => [
'driver' => 'odbc',
'dsn' => 'OdbcConnectionName',
'database' => 'DatabaseName',
'host' => '127.0.0.1',
'username' => 'username',
'password' => 'password',
'options' => [
'processor' => Illuminate\Database\Query\Processors\Processor::class, //default
'grammar' => [
'query' => Illuminate\Database\Query\Grammars\Grammar::class, //default
'schema' => Illuminate\Database\Schema\Grammars\Grammar::class //default
]
]
]
This error can occure on Mac OS. Make sure you have the PHP extensions odbc
and PDO_ODBC
installed.
If you got the error internal error, unexpected SHLIBEXT value
you should change the used cursor library:
'odbc-connection-name' => [
'driver' => 'odbc',
'dsn' => 'Driver={Your Snowflake Driver};Server=snowflake.example.com', // odbc: will be prefixed
// ....
'options' => [
\PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => \PDO::ODBC_SQL_USE_DRIVER
// or
// 1000 => 2
]
]
// \PDO::ODBC_ATTR_USE_CURSOR_LIBRARY equals 1000
// \PDO::ODBC_SQL_USE_DRIVER equals 2
Check other options here