PHPackages                             mreschke/dbal - 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. mreschke/dbal

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

mreschke/dbal
=============

Mreschke Helpers

5.3.2(2y ago)02.1kMITPHP

Since Nov 11Pushed 2y ago2 watchersCompare

[ Source](https://github.com/mreschke/dbal)[ Packagist](https://packagist.org/packages/mreschke/dbal)[ Docs](http://github.com/mreschke/mreschke-dbal)[ RSS](/packages/mreschke-dbal/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (13)Used By (0)

mreschke/dbal
=============

[](#mreschkedbal)

- [Introduction](#introduction)
- [Collection Info](#collection)
- [Connection and Instantiation](#connection)
- [Entity based Integration](#entity-integration)
- [Adhoc Query Usage](#adhoc)

Introduction
============

[](#introduction)

A Laravel based dbal helper library and query builder with easy class based entity integration.

This was built before I used Laravel Query Builder or Eloquent and before I built the far more robust and feature rich

This still has a some advantages like:

- Mssql binary GUID conversions
- Mssql int or decimal to int in PHP return.
- In MySQL PDO setting PDO::ATTR\_EMULATE\_PREPARES =&gt; false and PDO::ATTR\_STRINGIFY\_FETCHES =&gt; false will return true integers, but does not work for MSSQL dblib connections.
- Cross/linked server support
- Easy and clean entity class integration (but NOT entity mapping)

but is mostly for legacy use now that I built `mreschke/repository`. It was built primarily for our MSSQL farm, but uses PDO and has MySQL support as well.

This dbal does have a "basic" query builder, but was also designed to throw large RAW queries...much like you would in your SQL IDE. So it can handle lots of full and partial RAW SQL queries (most of which are NOT escaped, be careful).

If starting a new project just use Laravel Query Builder or Eloquent...or better still,  ... seriously, use `mreschke/repository`if you want anything advanced with a consistent and entity mapped API. See [Entity based Integration](#entity-integration) below.

Collection Info
===============

[](#collection-info)

All multiple returns like `->get()`, `->all()`, `getArray()`, `getAssoc()`...will return as a Laravel `Illuminate\Support\Collection`. This means you can perform many similar looking methods AFTER dbal has returned...don't confuse these with dbal methods.

Examples of collection usage

```
$customers = $this->db->query("SELECT * FROM customers")->all();
$customer->count(); //collection level count
$customer->first(); //collection level first
etc...

```

See  for more

Connection and Instantiation
============================

[](#connection-and-instantiation)

`Mreschke/dbal` is a Laravel library so it utilizes the existing database configuration arrays found in Laravel `config/database.php`. By default, if you use `Mreschke\Dbal\Mssql`it will use the `sqlsrv` connection array and if you use `Mreschke\Dbal\Mysql` it will use the `mysql` connection array.

To change the connection, much like Laravel query builder, use

```
$this->db->connection('othercon')->query(...)->get()

```

`Mreschke/dbal` comes with 2 facades, `Mysql` and `Mssql`. So you can simply use

```
Mssql::query('SELECT * FROM customers')->get()

```

But of course the preferred method is through dependency injection of `Mreschke\Dbal\Mssql` into your constructor.

Entity based Integration
========================

[](#entity-based-integration)

You can use `mreschke/dbal` for [Adhoc Query Usage](#adhoc). Adhoc would be synonymous with Laravel query builder (not eloquent). Just use it on-the-fly whenever needed.

But an interesting integration comes about when you tie the `mreschke/dbal` query builder with an individual class.

Think of the class your "entity", like `Sso\User.php` for example. And that `User.php` class can of course have its own methods and properties, but it can also be backed by mreschke/dbal tied to a database backend. You can integrate this class with `mreschke/dbal` by extending the Builder class to add a fluent entity API like:

```
$sso->user->find(45); // provided by dbal
$sso->user->where('email', 'mail@example.com'); // provided by dbal
$sso->user->byServer(1); // custom method in our User.php class, but it uses dbal behind the scenes

```

So this turns a basic PHP class or "entity" object into a fluent model. Something like Eloquent does.

**NOTICE:** I firmly believe that an entity should be treated like an API and therefore be consistent. If you change the database column names, the return of the entity should **not** change. With this mreschke\\dbal, the results are tied directly to the database which is an issue for consistency. This is why I created

`Mreschke/repository` is a much more advanced entity system than simply integrating a database with an entity class. `Mreschke/repository` adds active records, column and entity mapping abstractions and repository style swappable backends. It is highly recommended to use `mreschke/repository` if you need this type of entity integration.

The prefered system is Laravel Query Builder (not eloquent) for adhoc queries and `mreschke/repository` for entity management and APIs.

**This is how we would implement a SSO\\User.php entity class backed by mreschke/dbal**

```
