Using Data Sources

Introduction

Before we dive into the next section about models, it's important to understand how a model manipulates it's underlying data. In li3, this is done through a collection of classes called data sources.

While models expose a common API for your application to manipulate data, the purpose of a data source is to manage the direct connection details for a specific data storage medium. Apart from providing a common way to read and write, models use data sources to connect to, disconnect from, and describe their underlying services.

Core Data Sources

li3 provides a number of data sources your models can utilize. The list is growing, but currently includes:

  • MySQL
  • SQLite3
  • CouchDB
  • MongoDB

Data Sources and Models

Most of the time, using a data source is an automatic part of setting up a connection to your data store. This is usually done in the config/bootstrap/connections.php bootstrap file:

use lithium\data\Connections;

Connections::add('default', [
	'type' => 'MongoDb',
	'host' => 'localhost',
	'database' => 'my_lithium_app'
]);

Connections::add('legacy', [
	'type' => 'database',
	'adapter' => 'MySql',
	'host' => 'localhost',
	'login' => 'root',
	'password' => '53Cre7',
	'database' => 'my_older_lithium_app'
]);

The Connections class handles adapter classes efficiently by only loading adapter classes and creating instances when they are requested (using Connections::get()).

Adapters are usually subclasses of lithium\data\Source. Once these connections have been made, the data source is available to your models. Since one of the connections defined above is named default, newly created models will automatically use that connection and its related data source adapter.