Исходник:
https://github.com/iv-litovchenko/maptex/blob/master/app/Models/Technology.php
PHP:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Kalnoy\Nestedset\NodeTrait;
/**
* App\Models\Technology
*
* @mixin \Eloquent
*/
class Technology extends Model
{
public function migration(Blueprint $table)
{
$table->id();
$table->nestedSet();
$table->integer('branch_type')->default(0);
$table->integer('branch_stop_flag')->default(0);
$table->integer('is_page_flag')->default(0);
$table->integer('is_draft_flag')->default(0);
$table->unsignedBigInteger('user_id');
$table->string('name')->nullable();
$table->string('slug')->nullable();
$table->text('description')->nullable();
$table->text('description_tinymce')->nullable();
$table->text('logo_image')->nullable();
$table->integer('sorting')->default(0);
$table->timestamps();
// TODO добавление индекса...
$table->index('user_id', 'technology_user_idx');
// if (Schema::hasTable('users')) {
// $table->foreign('user_id', 'technology_user_fk')
// ->references('id')
// ->on('users');
// }
// TODO [не актуально!] в обычных миграциях последовательность удаления важна!
// $table->dropForeign('technology_user_fk');
// $table->dropIndex('technology_user_idx');
// $table->dropColumn('user_id');
}
}
Все прекрасно добавляется, удаляется одной командой migrage:auto (laravel)
Пакет который попробовал - composer "bastinald/laravel-automatic-migrations": "^3.0" (
https://github.com/bastinald/laravel-automatic-migrations)
Единственное что не знаю как быть в случае переименования таблицы...
И у меня не получается почему-то запустить создание внешнего ключа
$table->foreign('user_id', 'technology_user_fk')
// ->references('id')
// ->on('users');
- но это больше наверное к doctrine/dbal и MySQL вопрос.
MySQL не хочет выполнять вот этот запрос от доктрины:
ALTER TABLE technologies ADD
CONSTRAINT blabla FOREIGN KEY (user_id) REFERENCES users (id)
Именно вот эту часть... Если убрать
CONSTRAINT blabla (или technology_user_fk) то все работает.
По крайней мере теперь вся структура таблицы в 1 файле а не разбросана в куче файлов. И нет такого понятия откатить, накатить. Добавил колонку выполнил миграцию, убрал колонку выполнил миграцию... Надо переименовать колонку - переименовал ее в zzz_... Тем самым сохранив данные.