A simple PHP package that returns information about a database's table structure.
Describe is a PHP package that returns information about a table structure from a database.
Install Describe
via Composer:
$ composer require rougin/describe
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:
Driver | Description | Vendor |
---|---|---|
Rougin\Describe\Driver\MysqlDriver | Uses the DESCRIBE query. | MySQL |
Rougin\Describe\Driver\SqlServerDriver | Uses the INFORMATION_SCHEMA.COLUMNS query. | SQL Server |
Rougin\Describe\Driver\SqliteDriver | Uses the PRAGMA table_info() query. | SQLite |
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 driversMysqlDriver
andSqliteDriver
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');
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();
}
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.
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.