This is a simple wrapper of Eloquent ORM for Slim 3. It provides a Parser class to generate connections option from a standard database URL of PostgresSQL, MySQL or SQLite databases.
You can use the slimcmd tool to install this dependency:
slimcmd dependency:add eloquent
Or you can setup manually:
composer require corephp/slim-eloquent
Te allowed formats of database connections are:
mysql://user:password@host:post/database
postgres://user:password@host:post/database
sqlite://pato/to.database
The Parser class has 3 available methods to generate conection opctions for Eloquent:
- parseConnection: Parse connection strings for MySQL, PostgreSQL and SQLite connections.
- parseGeneral: Parse connections for MySQL and PostgreSQL only.
- parseSqlite: Parse connections for SQLite only.
The parseConnection
and the parseGeneral
function generates a configuration array as it shown below when pass a PostgreSQL or MySQL connection:
$options = [
'driver' => 'mysql|pgsql|sqlite',
'host' => 'host',
'port' => 3306,
'database' => 'database',
'username' => 'user',
'password' => 'pass',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
];
The parseConnection
and the parseSqlite
function generates a configuration array as shown below when pass a SQLite connection.
$options = [
'driver' => 'sqlite',
'database' => '/path/to.database',
'foreign_key_constraints' => true,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
];
use CorePHP\Slim\Dependency\Database\Parser;
$settings = [
// ...
"database" => Parser::parseConnection(
getenv('DATABASE_URL')
)
// ...
];
This class allows you to create the main connection to embed as dependency on Slim.
You can generate a database.php
file your dependencies section with the code below:
use CorePHP\Slim\Dependency\Database\Eloquent;
return function ($container) {
$settings = $container->get('eloquent');
$eloquent = new Eloquent();
$eloquent->addConnection($settings);
return $eloquent->getManager();
};
This generates the main connection and boot Eloquent to use the models. Also you can setup a read and write configuration with diferent databases.
use CorePHP\Slim\Dependency\Database\Eloquent;
return function ($container) {
$eloquent = new Eloquent();
$eloquent->addConnection($container['database'], 'default', 'r'); // read
$eloquent->addConnection($container['database2'], 'default', 'w'); // write
return $eloquent->getManager();
}
This packages provides a predefined base model class that brings you the most basic configuration of Models that you need and you can use it as shown below:
use CorePHP\Slim\Dependency\Database\Model;
class User extends Model
{
protected $table = 'users';
}
The Model class has 2 preconfigured functions:
- getDateFormat: Has the date format definition as 'Y-m-d H:i:s'
- scopePagination: Scope that can be aded at the end of a chain of query
filters to generate paginated sections of a single query. This scope has 3
parameters: $limit, $page and $links in that order.
$limit
: Is the number of elements by page that will be retrived by the query.$page
: Page that will be retrived. I you set a number lower than 1, you will always have the page 1, and if you set a number greater than the total of pages, you will always have the last page posible.$links
: this is a boolean parameter, if you set as true, this generates an extra key on the resultant array named links that will have the pagination sections in an array like this:[1, 2, 3, 4, 5, 6, '...', 100]
. this can Helpyou to generate a custom pagination for your datatables.
$items = User::where('name', 'like', '%Jhon%')
->pagination(10, 1, true);
// The content of items variable will be:
//
// [
// "data" => [ ... ]
// "pages" => [
// "limit" => 10,
// "pages" => 100 /* depending of the total elemtns */
// "total" => 1000 /* total elemtns of the query */
// "page" => 1,
// "links" => [ 1, 2, 3, 4, 5, 6, '...', 100 ]
// ]
// ]