rougin/describe

Obtain information of a database table.

v1.8.1 2024-10-19 17:40 UTC

README

Latest Version on Packagist Software License Build Status Coverage Status Total Downloads

Describe is a PHP package that returns information about a table structure from a database.

Installation

Install Describe via Composer:

$ composer require rougin/describe

Basic Usage

Prior in getting information of a table structure, a vendor-specific driver must be implemented:

// index.php

use Rougin\Describe\Driver\MysqlDriver;

$dsn = 'mysql:host=localhost;dbname=test';

$pdo = new PDO($dsn, 'root', '');

$driver = new MysqlDriver($pdo, 'test');

Below are the available drivers for specified vendors:

Alternatively, the DatabaseDriver can also be used to use a vendor-specific driver based on keyword:

use Rougin\Describe\Driver\DatabaseDriver;

$creds = array('password' => '');

$creds['hostname'] = 'localhost';
$creds['database'] = 'test';
$creds['username'] = 'root';

$driver = new DatabaseDriver('mysql', $creds);

Note

DatabaseDriver is currently available to drivers MysqlDriver and SqliteDriver only.

After specifying the driver, use the columns method to return a list of columns:

// index.php

/** @var \Rougin\Describe\Column[] */
$columns = $driver->columns('users');

Adding a new database driver

To add a new driver for a specified vendor, kindly implement it to a DriverInterface:

namespace Rougin\Describe\Driver;

interface DriverInterface
{
    /**
     * Returns a list of columns from a table.
     *
     * @param  string $table
     * @return \Rougin\Describe\Column[]
     */
    public function columns($table);

    /**
     * Returns a list of tables.
     *
     * @return \Rougin\Describe\Table[]
     */
    public function tables();
}

Using Table

The Table class is similar with the DriverInterface with the difference that it can return the primary key from the list of columns:

use Rougin\Describe\Table;

$table = new Table('users', $driver);

/** @var \Rougin\Describe\Column[] */
$columns = $driver->columns();

/** @var \Rougin\Describe\Column */
$primary = $driver->primary();

For more information regarding the Column object, kindly check its code documentation.

Projects using Describe

The following projects below uses Describe as a valuable tool for getting a structure of a database table:

Combustor is a utility package for Codeigniter 3 that generates controllers, models, and views based on the provided database tables. It uses the Describe package for getting columns from a database table and as the basis for code generation.

Refinery is a console-based package of Migrations Class for the Codeigniter 3. It uses the Describe package for retrieving the database tables for creating database migrations.

Changelog

Please see CHANGELOG for more information what has changed recently.

Testing

The unit tests for this package were written on PHPUnit:

$ composer test

Credits

License

The MIT License (MIT). Please see LICENSE for more information.