Skip to content

Getting Started

Installation

You can install Leaf Db with Leaf CLI:

leaf install db

Or with composer:

composer require leafs/db

From there, you can link your database and start writing some awesome queries.

Coming from v1

If you are coming from Leaf Db v1, we recommend checking the changelog

Functional Mode

If you are using leaf db v2 in a leaf 3 app, you will have access to the db global which allows you to use Leaf Db from anywhere in your entire application. You simply need to call db() and leaf 3 will create and maintain a shared instance of Leaf db which you can call from anywhere.

This also means that you don't need to initialize leaf db anymore.

<?php

require __DIR__ . "/vendor/autoload.php";

db()->connect('127.0.0.1', 'test');

app()->get("/", function () {
  // db can be used here
  // db()->...
});

app()->run();

Db Connection

After installing leaf db, you will need to connect to your database to get started. There are multiple ways to connect to your database using leaf db.

connect on init

This method connects to the database when initializing Leaf Db.

// syntax
$db = new Leaf\Db(
  $host = '',
  string $dbname = '',
  string $user = '',
  string $password = '',
  string $dbtype = 'mysql'
);

// example
$db = new Leaf\Db('127.0.0.1', 'db_name', 'root', 'password123');

Leaf db takes in 5 optional parameters:

  • The database host eg: localhost
  • The database name
  • The database username
  • The database password
  • The PDO database driver eg: mysql, pgsql, ...

Alternatively, you can pass an array into the host parameter to connect to your database like this:

// syntax
$db = new Leaf\Db([
  'dbtype' => 'mysql',
  'charset' => null,
  'port' => null,
  'unixSocket' => null,
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => '',
  'dbname' => '',
]);

// example
$db = new Leaf\Db([
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => 'password123',
  'dbname' => 'db name',
]);

You only need to pass the fields you want to configure.

connect

Connect takes in 4 params just like the method above

// syntax
db()->connect(
  $host = '',
  string $dbname = '',
  string $user = '',
  string $password = '',
  string $dbtype = 'mysql',
  array $pdoOptions = []
);

// example
db()->connect('127.0.0.1', 'dbname', 'root', '');

Leaf db takes in 5 optional parameters:

  • The database host eg: localhost
  • The database name
  • The database username
  • The database password
  • The PDO database driver eg: mysql, pgsql, ...
  • Configuration specific to the PHP PDO class
$db = new Leaf\Db;

// syntax
$db->connect(
  $host = '',
  string $dbname = '',
  string $user = '',
  string $password = '',
  string $dbtype = 'mysql',
  array $pdoOptions = []
);

// example
$db->connect('127.0.0.1', 'dbname', 'root', '');

Connect works the same way as the constructor, except that it accepts one more parameter: $pdoOptions which is a bunch of configuration specific to the PHP PDO class.

Alternatively, you can pass an array into the host parameter to connect to your database like this:

// syntax
db()->connect([
  'dbtype' => 'mysql',
  'charset' => null,
  'port' => null,
  'unixSocket' => null,
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => '',
  'dbname' => '',
]);

// example
db()->connect([
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => 'password123',
  'dbname' => 'db name',
]);
$db = new Leaf\Db();

// syntax
$db->connect([
  'dbtype' => 'mysql',
  'charset' => null,
  'port' => null,
  'unixSocket' => null,
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => '',
  'dbname' => '',
]);

// example
$db->connect([
  'host' => '127.0.0.1',
  'username' => 'root',
  'password' => 'password123',
  'dbname' => 'db name',
]);

You only need to pass the fields you want to configure.

autoConnect

This method allows you to connect to your database from parameters in a .env file. Most MVC frameworks and other libraries rely on a .env for a lot of configurations including the database. With autoConnect, you can directly pick up these configs.

example env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=LeafMVC
DB_USERNAME=root
DB_PASSWORD=

App:

db()->autoConnect();
$db = new Leaf\Db;
$db->autoConnect();

PDO connection

Leaf Db also allows you to skip the entire connection process and share an existing PDO instance with leaf db. This allows you to gradually rewrite your existing apps with Leaf Db without having multiple db connections and doing so at your own pace.

$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '');

db()->connection($db);

// you can use leaf db the same way you always have
$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '');

$db = new Leaf\Db();
$db->connection($pdo);

// you can use leaf db the same way you always have

Simple queries

Leaf Db provides a ton of functionality, with a bunch of powerful tools, but at the same time gives you a great deal of customizations with the query method. You can write your raw SQL queries with the query method, however you can still use the cool features Leaf Db provides.

$users = db()->query('SELECT * FROM users')->all();
$users = $db->query('SELECT * FROM users')->all();

You can also use parameter binding with query

db()->query('SELECT * FROM users WHERE id = ?')->bind('1')->fetchObj();
$db->query('SELECT * FROM users WHERE id = ?')->bind('1')->fetchObj();

A shorter method would be to use where

db()->query('SELECT * FROM users')->where('id', '1')->fetchObj();
$db->query('SELECT * FROM users')->where('id', '1')->fetchObj();

You don't have to worry about security, where uses prepared statements by default, so you're pretty good.

You've seen all this, but guess what? There's something even shorter

db()->select('users')->where('id', '1')->fetchObj();
$db->select('users')->where('id', '1')->fetchObj();

This is what Leaf Db does for you. A new way to write your Database queries without actually needing to write any real queries. Also, unlike other query builders, there's no need to create classes and models for every table you want to fetch from. Everything's accessible with one line of code.

Running queries

There are different types of queries, some return values and others don't. Leaf Db provides a seamless way of handling both.

execute

execute is a method on Leaf Db which allows you to run a query instantly. The execute method is used when the query is NOT expected to return a value.

db()->query('CREATE DATABASE dbname')->execute();
$db->query('CREATE DATABASE dbname')->execute();

fetchAll

fetchAll is a method simply returns all the results of a query. Under the hood, the query is run using execute and the value is retrieved and returned. This method is used when there are a lot of values to return.

$users = db()->query('SELECT * FROM users')->fetchAll();
$users = $db->query('SELECT * FROM users')->fetchAll();

Aliases

fetchAll has aliases adapted from other libraries and frameworks. Instead of fetchAll, you can use all and get

$users = db()->query('SELECT * FROM users')->all();
$users = db()->query('SELECT * FROM users')->get();
$users = $db->query('SELECT * FROM users')->all();
$users = $db->query('SELECT * FROM users')->get();

In this case, the $users variable with contain an array of associative arrays, but if you want an array of objects, you can pass obj or object as a parameter into fetchAll

$users = db()->query('SELECT * FROM users')->fetchAll('obj');
$users = db()->query('SELECT * FROM users')->all('object');
$users = db()->query('SELECT * FROM users')->get('obj');
$users = $db->query('SELECT * FROM users')->fetchAll('obj');
$users = $db->query('SELECT * FROM users')->all('object');
$users = $db->query('SELECT * FROM users')->get('obj');

fetchObj

fetchObj is a method that fetches the next row and returns it as an object. It returns only one object, so it should be used only on queries that return a single item.

$user = db()->query('SELECT * FROM users WHERE id = 1')->fetchObj();
$user = $db->query('SELECT * FROM users WHERE id = 1')->fetchObj();

Aliases

Instead of fetchObj, you can use obj

$user = db()->query('SELECT * FROM users WHERE id = 1')->obj();
$user = $db->query('SELECT * FROM users WHERE id = 1')->obj();

Watch out

fetchObj returns an object, so you can use the result like this:

$user = db()->query('SELECT * FROM users WHERE id = 1')->obj();
$user->id // not $user["id"]
$user = $db->query('SELECT * FROM users WHERE id = 1')->obj();
$user->id // not $user["id"]

fetchAssoc

fetchAssoc is a method that fetches the next row and returns it as an array. It returns only one array, so it should be used only on queries that return a single item.

$user = db()->query('SELECT * FROM users WHERE id = 1')->fetchAssoc();
$user = $db->query('SELECT * FROM users WHERE id = 1')->fetchAssoc();

Aliases

Instead of fetchAssoc, you can use assoc

$user = db()->query('SELECT * FROM users WHERE id = 1')->assoc();
$user = $db->query('SELECT * FROM users WHERE id = 1')->assoc();

Watch out

fetchAssoc returns an array, so you can use the result like this:

$user = db()->query('SELECT * FROM users WHERE id = 1')->assoc();
$user['id'] // not $user->id
$user = $db->query('SELECT * FROM users WHERE id = 1')->assoc();
$user['id'] // not $user->id

first

first returns the first item in the database that matches the condition given.

$user = db()->query('SELECT * FROM users')->first();
$user = $db->query('SELECT * FROM users')->first();

Although all our users are saved in the users table, first will return only the first record.

last

last returns the last item in the database that matches the condition given.

$user = db()->query('SELECT * FROM users')->last();
$user = $db->query('SELECT * FROM users')->last();

Although all our users are saved in the users table, last will return only the last record.

Getting Started has loaded