# Migrations
Twill's generated migrations are standard Laravel migrations, enhanced with helpers to create the default fields any CRUD module will use:
<?php
// main table, holds all non translated fields
Schema::create('table_name_plural', function (Blueprint $table) {
createDefaultTableFields($table);
// will add the following inscructions to your migration file
// $table->increments('id');
// $table->softDeletes();
// $table->timestamps();
// $table->boolean('published');
});
// translation table, holds translated fields
Schema::create('table_name_singular_translations', function (Blueprint $table) {
createDefaultTranslationsTableFields($table, 'tableNameSingular');
// will add the following inscructions to your migration file
// createDefaultTableFields($table);
// $table->string('locale', 6)->index();
// $table->boolean('active');
// $table->integer("{$tableNameSingular}_id")->unsigned();
// $table->foreign("{$tableNameSingular}_id", "fk_{$tableNameSingular}_translations_{$tableNameSingular}_id")->references('id')->on($table)->onDelete('CASCADE');
// $table->unique(["{$tableNameSingular}_id", 'locale']);
});
// slugs table, holds slugs history
Schema::create('table_name_singular_slugs', function (Blueprint $table) {
createDefaultSlugsTableFields($table, 'tableNameSingular');
// will add the following inscructions to your migration file
// createDefaultTableFields($table);
// $table->string('slug');
// $table->string('locale', 6)->index();
// $table->boolean('active');
// $table->integer("{$tableNameSingular}_id")->unsigned();
// $table->foreign("{$tableNameSingular}_id", "fk_{$tableNameSingular}_translations_{$tableNameSingular}_id")->references('id')->on($table)->onDelete('CASCADE')->onUpdate('NO ACTION');
});
// revisions table, holds revision history
Schema::create('table_name_singular_revisions', function (Blueprint $table) {
createDefaultRevisionTableFields($table, 'tableNameSingular');
// will add the following inscructions to your migration file
// $table->increments('id');
// $table->timestamps();
// $table->json('payload');
// $table->integer("{$tableNameSingular}_id")->unsigned()->index();
// $table->integer('user_id')->unsigned()->nullable();
// $table->foreign("{$tableNameSingular}_id")->references('id')->on("{$tableNamePlural}")->onDelete('cascade');
// $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
});
// related content table, holds many to many association between 2 tables
Schema::create('table_name_singular1_table_name_singular2', function (Blueprint $table) {
createDefaultRelationshipTableFields($table, $table1NameSingular, $table2NameSingular);
// will add the following inscructions to your migration file
// $table->integer("{$table1NameSingular}_id")->unsigned();
// $table->foreign("{$table1NameSingular}_id")->references('id')->on($table1NamePlural)->onDelete('cascade');
// $table->integer("{$table2NameSingular}_id")->unsigned();
// $table->foreign("{$table2NameSingular}_id")->references('id')->on($table2NamePlural)->onDelete('cascade');
// $table->index(["{$table2NameSingular}_id", "{$table1NameSingular}_id"]);
});
A few CRUD controllers require that your model have a field in the database with a specific name: published
, publish_start_date
, publish_end_date
, public
, and position
, so stick with those column names if you are going to use publication status, timeframe and reorderable listings.
← CLI Generator Models →