2017 © Pedro Peláez
 

kohana-module kohana-schema

This is a port of Laravels Schema library to Kohana. It provides a database agnostic way of manipulating tables. It works well with all of the databases supported by Doctrine DBAL, and has a unified API across all of these systems.

image

evopix/kohana-schema

This is a port of Laravels Schema library to Kohana. It provides a database agnostic way of manipulating tables. It works well with all of the databases supported by Doctrine DBAL, and has a unified API across all of these systems.

  • Thursday, May 8, 2014
  • by evopix
  • Repository
  • 4 Watchers
  • 12 Stars
  • 1,024 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

This is a port of Laravels Schema library to Kohana.


, (*1)

Introduction

The Kohana Schema class provides a database agnostic way of manipulating tables. It works well with all of the databases supported by Kohana, and has a unified API across all of these systems., (*2)

, (*3)

Creating & Dropping Tables

To create a new database table, the Schema::create method is used:, (*4)

Schema::create('users', function($table)
{
    $table->increments('id');
});

The first argument passed to the create method is the name of the table, and the second is a Closure which will receive a Blueprint object which may be used to define the new table., (*5)

To rename an existing database table, the rename method may be used:, (*6)

Schema::rename($from, $to);

To specify which connection the schema operation should take place on, pass a third parameter to the method:, (*7)

Schema::create('users', function($table)
{
    $table->increments('id');
}, 'default');

To drop a table, you may use the Schema::drop method:, (*8)

Schema::drop('users');

, (*9)

Adding Columns

To update an existing table, we will use the Schema::table method:, (*10)

Schema::table('users', function($table)
{
    $table->string('email');
});

, (*11)

Modifying Columns

To modify columns in an existing table, we will use the Schema::table method:, (*12)

Schema::table('users', function($table)
{
    $table->modify_column('email', 'string', ['length' => '50']);
});

Note: Modifying columns is not supported in SQLite., (*13)

The table builder contains a variety of column types that you may use when building your tables:, (*14)

Command Description
$table->big_increments('id'); Incrementing ID using a "big integer" equivalent.
$table->big_integer('votes'); BIGINT equivalent to the table
$table->binary('data'); BLOB equivalent to the table
$table->boolean('confirmed'); BOOLEAN equivalent to the table
$table->date('created_at'); DATE equivalent to the table
$table->datetime('created_at'); DATETIME equivalent to the table
$table->decimal('amount', 5, 2); DECIMAL equivalent with a precision and scale
$table->double('column', 15, 8); DOUBLE equivalent with precision
$table->enum('choices', array('foo', 'bar')); ENUM equivalent to the table
$table->float('amount'); FLOAT equivalent to the table
$table->increments('id'); Incrementing ID to the table (primary key).
$table->integer('votes'); INTEGER equivalent to the table
$table->long_text('description'); LONGTEXT equivalent to the table
$table->medium_text('description'); MEDIUMTEXT equivalent to the table
$table->morphs('taggable'); Adds INTEGER taggable_id and STRING taggable_type
$table->small_integer('votes'); SMALLINT equivalent to the table
$table->tiny_integer('numbers'); TINYINT equivalent to the table
$table->soft_deletes(); Adds deleted_at column for soft deletes
$table->string('email'); VARCHAR equivalent column
$table->string('name', 100); VARCHAR equivalent with a length
$table->text('description'); TEXT equivalent to the table
$table->time('sunrise'); TIME equivalent to the table
$table->timestamp('added_on'); TIMESTAMP equivalent to the table
$table->timestamps(); Adds created_at and updated_at columns
->nullable() Designate that the column allows NULL values
->default($value) Declare a default value for a column
->unsigned() Set INTEGER to UNSIGNED

If you are using the MySQL database, you may use the after method to specify the order of columns:, (*15)

Using After On MySQL

$table->string('name')->after('email');

, (*16)

Renaming Columns

To rename a column, you may use the rename_column method on the Schema builder. Before renaming a column, be sure to add the doctrine/dbal dependency to your composer.json file., (*17)

Renaming A Column

Schema::table('users', function($table)
{
    $table->rename_column('from', 'to');
});

Note: Renaming enum column types is not supported., (*18)

, (*19)

Dropping Columns

Dropping A Column From A Database Table

Schema::table('users', function($table)
{
    $table->drop_column('votes');
});

Dropping Multiple Columns From A Database Table

Schema::table('users', function($table)
{
    $table->drop_column('votes', 'avatar', 'location');
});

, (*20)

Adding Indexes

The schema builder supports several types of indexes. There are two ways to add them. First, you may fluently define them on a column definition, or you may add them separately:, (*21)

Fluently Creating A Column And Index

$table->string('email')->unique();

Or, you may choose to add the indexes on separate lines. Below is a list of all available index types:, (*22)

Command Description
$table->primary('id'); Adding a primary key
$table->primary(array('first', 'last')); Adding composite keys
$table->unique('email'); Adding a unique index
$table->index('state'); Adding a basic index

, (*23)

Foreign Keys

Laravel also provides support for adding foreign key constraints to your tables:, (*24)

Adding A Foreign Key To A Table

$table->foreign('user_id')->references('id')->on('users');

In this example, we are stating that the user_id column references the id column on the users table., (*25)

You may also specify options for the "on delete" and "on update" actions of the constraint:, (*26)

$table->foreign('user_id')
      ->references('id')->on('users')
      ->on_delete('cascade');

To drop a foreign key, you may use the drop_foreign method. A similar naming convention is used for foreign keys as is used for other indexes:, (*27)

$table->drop_foreign('posts_user_id_foreign');

Note: When creating a foreign key that references an incrementing integer, remember to always make the foreign key column unsigned., (*28)

, (*29)

Dropping Indexes

To drop an index you must specify the index's name. Laravel assigns a reasonable name to the indexes by default. Simply concatenate the table name, the names of the column in the index, and the index type. Here are some examples:, (*30)

Command Description
$table->drop_primary('users_id_primary'); Dropping a primary key from the "users" table
$table->drop_unique('users_email_unique'); Dropping a unique index from the "users" table
$table->drop_index('geo_state_index'); Dropping a basic index from the "geo" table

, (*31)

Storage Engines

To set the storage engine for a table, set the engine property on the schema builder:, (*32)

Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';

    $table->string('email');
});

The Versions

08/05 2014

dev-master

9999999-dev

This is a port of Laravels Schema library to Kohana. It provides a database agnostic way of manipulating tables. It works well with all of the databases supported by Doctrine DBAL, and has a unified API across all of these systems.

  Sources   Download

MIT

The Requires