Package Data | |
---|---|
Maintainer Username: | stidges |
Maintainer Contact: | info@stidges.com (Stidges) |
Package Create Date: | 2014-06-22 |
Package Last Update: | 2014-06-25 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-22 03:06:19 |
Package Statistics | |
---|---|
Total Downloads: | 4,229 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 37 |
Total Watchers: | 4 |
Total Forks: | 1 |
Total Open Issues: | 0 |
This Laravel package provides a base migration for you to extend to easily create all your foreign keys. If you ever ran into the problem where you had to reorganize all your migrations due to failing foreign key constraints, this is the package for you!
This package can be installed through Composer, just add it to your composer.json file:
{
"require": {
"stidges/laravel-fk-migration": "1.*"
}
}
After you have added it to your composer.json file, make sure you update your dependencies:
composer update
To get started, create a new class in your app/database/migrations/
directory.
If you want to make sure this migration gets executed last, you can name it something like 9999_99_99_999999_create_foreign_keys.php
(this might be slightly overdone, but you get the idea).
Next, add the following content to the empty class you just created:
<?php
use Stidges\LaravelFkMigration\Migration;
class CreateForeignKeys extends Migration {
/**
* The foreign keys to create or drop.
*
* @var array
*/
protected $keys = [];
}
The $keys
array is where you can define your foreign keys. It should be an associative array, where the key is the table name, and the value is a (list of) foreign key(s). Below you can find a list of options that can be specified for the foreign keys.
| Key | Default | Description |
|:-------------|:------------:|:-------------------------------------------------------------------------|
| column
| none | The column on which to create the foreign key. |
| references
| 'id'
| The referenced column in the foreign table. |
| on
| none | The referenced table. If this option is not passed then it will create the name from the passed column
(e.g. 'user_id'
becomes 'users'
) |
| onUpdate
| 'cascade'
| The referential action to execute when the referenced column is updated. |
| onDelete
| 'restrict'
| The referential action to execute when the referenced column is deleted. |
Note: As a minimum you should specify the column
property for each foreign key. If you forget to specify this, an exception will be thrown.
Below you can find a basic example for reference.
<?php
use Stidges\LaravelFkMigration\Migration;
class CreateForeignKeys extends Migration {
protected $keys = [
'posts' => [ 'column' => 'category_id' ],
'post_tag' => [
[ 'column' => 'post_id', 'onDelete' => 'cascade' ],
[ 'column' => 'tag_id' ],
],
];
}
Internally, the migration will call a getKeys()
method, which by default returns the specified $keys
array. You are free to override this method if you wish to have more flexibility when defining keys. For example, if you have a lot of tables referencing the users
table, you can do the following:
<?php
use Stidges\LaravelFkMigration\Migration;
class CreateForeignKeys extends Migration {
protected $keys = [];
protected $presets = [
'user' => [ 'column' => 'user_id' ],
];
public function getKeys()
{
$keys = [
'posts' => [ $this->presets['user'] ],
'tags' => [ $this->presets['user'] ],
'categories' => [ $this->presets['user'] ],
];
return $keys;
}
}
This way you don't have to copy the same foreign key reference over and over!
All suggestions and pull requests are welcome! If you make any substantial changes, please provide tests along with your pull requests!
Copyright (c) 2014 Stidges - Released under the MIT license.