FEATURE #1452: add database migration for adding templates into database
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTemplateSupport extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// drop FK in contents table to modules
|
||||
try {
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->dropForeign('fk_content_module1');
|
||||
});
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
// probably foreign does not exist, try to remove one from migration
|
||||
try {
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->dropForeign('contents_module_handler_foreign');
|
||||
});
|
||||
} catch (\Illuminate\Database\QueryException $ex) {
|
||||
// ignore this error
|
||||
}
|
||||
}
|
||||
|
||||
// drop primary index in modules (previously was on handler column)
|
||||
Schema::table('modules', function (Blueprint $table) {
|
||||
$table->dropIndex('PRIMARY');
|
||||
});
|
||||
|
||||
// create new column ID, set it autoincrement and set unique index to handler
|
||||
Schema::table('modules', function (Blueprint $table) {
|
||||
$table->integer('id', true)
|
||||
->first();
|
||||
$table->unique('handler');
|
||||
});
|
||||
|
||||
// add again FK constraint to contents -> modules relationship
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->foreign('module_handler')
|
||||
->references('handler')
|
||||
->on('modules')
|
||||
->onDelete('cascade')
|
||||
->onUpdate('cascade');
|
||||
});
|
||||
|
||||
// create new table with templates
|
||||
Schema::create('templates', function (Blueprint $table) {
|
||||
$table->integer('id', true);
|
||||
$table->integer('module_id')
|
||||
->comment('Template belongs to module specified with this ID.');
|
||||
$table->timestamps();
|
||||
$table->string('template_name', 128)
|
||||
->comment('Template name used for rendering page. Use namespace::dir.template format.');
|
||||
$table->string('path')
|
||||
->comment('Path to this template. Given as relative path for theme directory.');
|
||||
$table->string('name')
|
||||
->comment('Human readable name of given template');
|
||||
$table->mediumText('description')
|
||||
->comment('Description of this template.');
|
||||
$table->boolean('editable')
|
||||
->comment('Can this template be edited?');
|
||||
|
||||
$table->index('module_id');
|
||||
$table->index('template_name');
|
||||
$table->unique(['module_id', 'template_name']);
|
||||
});
|
||||
|
||||
// add FK to templates->modules
|
||||
Schema::table('templates', function (Blueprint $table) {
|
||||
$table->foreign('module_id')
|
||||
->references('id')
|
||||
->on('modules')
|
||||
->onDelete('cascade')
|
||||
->onUpdate('cascade');
|
||||
});
|
||||
|
||||
// add column to contents - template name
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->string('template', 128)
|
||||
->after('module_handler')
|
||||
->comment('Template used for rendering this content page. [This should be FK to templates (template_name), however I was not able to create the constraint...]');
|
||||
|
||||
$table->index('template');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
|
||||
Schema::drop('templates');
|
||||
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->dropForeign('contents_module_handler_foreign');
|
||||
});
|
||||
|
||||
Schema::table('modules', function (Blueprint $table) {
|
||||
$table->dropColumn('id');
|
||||
$table->dropIndex('modules_handler_unique');
|
||||
$table->primary('handler');
|
||||
});
|
||||
|
||||
Schema::table('contents', function (Blueprint $table) {
|
||||
$table->dropColumn('template');
|
||||
|
||||
$table->foreign('module_handler')
|
||||
->references('handler')
|
||||
->on('modules')
|
||||
->onDelete('cascade')
|
||||
->onUpdate('cascade');
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user