PHPackages                             afghany97/laravel-pdo-odbc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. afghany97/laravel-pdo-odbc

ActiveLibrary[Database &amp; ORM](/categories/database)

afghany97/laravel-pdo-odbc
==========================

PDO ODBC/Snowflake integration for Laravel framework. Support ODBC and native PDO Snowflake.

047PHP

Since Dec 22Pushed 1y agoCompare

[ Source](https://github.com/afghany97/laravel-pdo-odbc)[ Packagist](https://packagist.org/packages/afghany97/laravel-pdo-odbc)[ RSS](/packages/afghany97-laravel-pdo-odbc/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (2)Used By (0)

ODBC/Snowflake Integration for Laravel Framework
================================================

[](#odbcsnowflake-integration-for-laravel-framework)

This repository provides seamless integration of ODBC/Snowflake with Laravel Eloquent. It aims to create a comprehensive ODBC package for Laravel, while also functioning as a standalone solution.

Unlike the `odbc_*` functions, this package utilizes the `PDO` class, resulting in smoother and more convenient integration with Eloquent.

The primary goal of this package is to offer a standardized approach to connect with an ODBC connection. It supports custom grammars and schemas to accommodate various ODBC connections, such as Snowflake.

How to Install
--------------

[](#how-to-install)

Before proceeding, ensure that you have PHP version 8.x installed on your system.

To add the package to your project, run the following command:

```
composer require yoramdelangen/laravel-pdo-odbc
```

By default, the package will be automatically registered through the `package:discover` command.

Alternatively, you can manually register the service provider in the `app.php` file:

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

If you intend to use the `snowflake_pdo` PHP extension, please follow the installation guide provided [here](https://github.com/snowflakedb/pdo_snowflake/)to set it up.

Starting from version `1.2.0`, the package includes support for `snowflake_pdo`, but it will still function without the Snowflake extension (via ODBC).

Configuration
-------------

[](#configuration)

The available driver flavors are:

- ODBC (generic)
- Snowflake (via ODBC and native through PHP extension)
- ...

### Snowflake Specific environment variables

[](#snowflake-specific-environment-variables)

You have the option to customize the Snowflake driver using the following parameters:

```
# 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
```

Usage
-----

[](#usage)

Configuring the package is straightforward:

**Add a Database Configuration to `database.php`**

Starting from version 1.2, we recommend using the native Snowflake extension instead of ODBC, but we'll keep supporting it.

```
'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
    ]
],
```

You have multiple ways to configure the ODBC connection:

1. Simple configuration using DSN only:

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

    or, if you don't have a datasource configured within your ODBC Manager:

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

    > Note: The DSN `Driver` parameter can either be an absolute path to your driver file or the name registered within the `odbcinst.ini` file/ODBC manager.
2. Dynamic configuration:

    ```
    '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
    ]
    ```

    > All fields, except for `driver`, `odbc_driver`, `options`, `username`, and `password`, will be dynamically added to the DSN connection string.
    >
    > Note: The DSN `odbc_driver` parameter can either be an absolute path to your driver file or the name registered within the `odbcinst.ini`file/ODBC manager.

Eloquent ORM
------------

[](#eloquent-orm)

You can use Laravel, Eloquent ORM, and other Illuminate 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();
```

Troubleshooting and more info
-----------------------------

[](#troubleshooting-and-more-info)

We have documented all weird behavious we encountered with the ODBC driver for Snowflake. In case of trouble of weird messages, checkout the following links:

- [Snowflake ODBC](docs/snowflake-odbc.md)
- [Snowflake ODBC Troubleshooting](docs/snowflake-odbc-troubleshooting.md)

Customization
-------------

[](#customization)

- [Custom `getLastInsertId()` Function](docs/custom-last-insert-id.md)
- [Custom Processor/QueryGrammar/SchemaGrammar](docs/custom-grammers.md)

###  Health Score

18

—

LowBetter than 10% of packages

Maintenance33

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity18

Early-stage or recently created project

 Bus Factor1

Top contributor holds 66.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/cf46c3e7061db6d931739f57c15388e8bc746bb879ec486763bd879c7b974583?d=identicon)[afghany](/maintainers/afghany)

---

Top Contributors

[![yoramdelangen](https://avatars.githubusercontent.com/u/1531885?v=4)](https://github.com/yoramdelangen "yoramdelangen (57 commits)")[![nvzsolutions](https://avatars.githubusercontent.com/u/6881597?v=4)](https://github.com/nvzsolutions "nvzsolutions (13 commits)")[![andreossido](https://avatars.githubusercontent.com/u/33807066?v=4)](https://github.com/andreossido "andreossido (9 commits)")[![aiv-damian](https://avatars.githubusercontent.com/u/132932727?v=4)](https://github.com/aiv-damian "aiv-damian (4 commits)")[![MuhammadReda97](https://avatars.githubusercontent.com/u/20626195?v=4)](https://github.com/MuhammadReda97 "MuhammadReda97 (2 commits)")[![sha1sum](https://avatars.githubusercontent.com/u/7863437?v=4)](https://github.com/sha1sum "sha1sum (1 commits)")

### Embed Badge

![Health badge](/badges/afghany97-laravel-pdo-odbc/health.svg)

```
[![Health](https://phpackages.com/badges/afghany97-laravel-pdo-odbc/health.svg)](https://phpackages.com/packages/afghany97-laravel-pdo-odbc)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k280.5M5.5k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k114.4M86](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k51.5M8.1k](/packages/illuminate-database)[mongodb/mongodb

MongoDB driver library

1.6k62.7M487](/packages/mongodb-mongodb)[spatie/laravel-translatable

A trait to make an Eloquent model hold translations

2.4k22.1M345](/packages/spatie-laravel-translatable)[kirschbaum-development/eloquent-power-joins

The Laravel magic applied to joins.

1.5k23.2M24](/packages/kirschbaum-development-eloquent-power-joins)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
