Search by

oniichann / cheap-sql-scheme

Oniichann

Визуальный редактор схем БД для Laravel: таблицы, колонки и связи на холсте, импорт из SQL-дампа или миграций, экспорт в миграции Laravel и .sql для MySQL, PostgreSQL и SQLite.

Package info

github.com/ONIIIIICHANNN/cheap-sql-scheme

Language:TypeScript

pkg:composer/oniichann/cheap-sql-scheme

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.1.0 2026-10-09 18:48 UTC

This package is auto-updated.

Last update: 2026-10-09 18:49:15 UTC


README

Визуальный редактор схем базы данных для Laravel. Ставится одной командой и открывается в браузере.

  • таблицы, колонки и связи на холсте; связь тянется мышкой от колонки к колонке;
  • PK, unique, index, nullable, автоинкремент, значения по умолчанию, перетаскивание колонок;
  • мягкие или прямые линии, цветные зоны, выделение рамкой;
  • импорт из SQL-дампа (в том числе phpMyAdmin) или из миграций Laravel;
  • экспорт в одну миграцию Laravel, в миграции по файлу на таблицу (ZIP, в порядке зависимостей) или в .sql для MySQL, PostgreSQL и SQLite;
  • схема твоей базы сразу после установки — редактор сам читает структуру базы проекта;
  • коммиты как в git — меняешь схему на холсте, видишь зелёным/красным/жёлтым, что поменялось, и получаешь миграцию только с изменениями (renameColumn, ->change(), dropColumn, ключи) с рабочим down();
  • «Save to project» — миграции записываются прямо в database/migrations, останется выполнить php artisan migrate;
  • английский (по умолчанию) и русский интерфейс, автосохранение, светлая и тёмная тема.

Установка

composer require oniichann/cheap-sql-scheme
php artisan migrate

Готово: откройте /sql-schemes.

Node.js не нужен: интерфейс уже собран и лежит в dist/, Laravel отдаёт его сам.

Требования

  • PHP 8.2+, расширение zip
  • Laravel 11, 12 или 13

Кто может открыть редактор

По умолчанию — все. Закрыть его решает ваше приложение, например в AppServiceProvider::boot():

use CheapSqlScheme\CheapSqlScheme;

// Только в локальной разработке:
CheapSqlScheme::auth(fn ($request) => app()->environment('local'));

// Только админам:
CheapSqlScheme::auth(fn ($request) => $request->user()?->is_admin);

// Через Gate:
CheapSqlScheme::auth(fn ($request) => Gate::allows('viewSqlSchemes'));

Можно и через middleware в конфиге: 'middleware' => ['web', 'auth'].

Все, кого пустили, работают в общем пространстве и видят все схемы. Если залогиненный пользователь должен видеть только свои, включите 'per_user' => true. Автор схемы запоминается в sql_schemas.user_id, если при создании кто-то был залогинен.

Настройка

php artisan vendor:publish --tag=cheap-sql-scheme-config

config/cheap-sql-scheme.php:

Ключ По умолчанию Что делает
path sql-schemes Адрес редактора; API живёт под /{path}/api
locale en Язык интерфейса: en или ru
middleware ['web'] Middleware интерфейса и API; например, ['web', 'auth']
per_user false true — залогиненный видит только свои схемы
back_url / Куда ведёт «← Назад» со списка схем; null прячет кнопку
user_model null Модель автора для SqlSchema::user(); null берёт auth.providers.users.model
import_max_kb 5120 Максимальный размер импортируемого файла
save_migrations null Кнопка «Save to project»: null — только в local, true/false — везде вкл/выкл
migrations_path null Куда писать миграции; null — database/migrations
project_schema.enabled true Создавать схему базы проекта при первом открытии
project_schema.connection null Соединение для чтения структуры; null — по умолчанию
project_schema.exclude служебные Таблицы, которых нет в схеме проекта

Основное можно поменять и без публикации конфига, через .env:

CHEAP_SQL_SCHEME_PATH=db-designer
CHEAP_SQL_SCHEME_LOCALE=ru
CHEAP_SQL_SCHEME_SAVE_MIGRATIONS=false

Схема проекта и коммиты

При первом открытии редактор читает структуру базы приложения (таблицы, колонки, одноколоночные индексы, внешние ключи) и создаёт схему «{APP_NAME} database». Служебные таблицы Laravel и таблицы пакета в неё не попадают — список в project_schema.exclude. Кнопка Refresh from database обновляет схему из базы, сохраняя положение таблиц на холсте.

Дальше всё как в git:

  1. Меняешь схему на холсте. Новые колонки отмечаются зелёным, изменённые — жёлтым, в шапке растёт счётчик Changes · N.
  2. Changes открывает окно коммита: по каждой таблице видно, что добавлено, удалено, изменено (было → стало) и переименовано, а на вкладке Migration — сама миграция.
  3. Commit to project записывает её в database/migrations (или Commit & download — скачать файл). Следующий коммит покажет только то, что поменялось после этого.

Что попадает в миграцию:

На холсте В миграции
новая таблица Schema::create(...)
переименовали таблицу Schema::rename(...)
удалили таблицу Schema::dropIfExists(...)
новая колонка $table->string('x')...
переименовали колонку $table->renameColumn(...) — данные сохраняются
поменяли тип, nullable, default ...->change()
удалили колонку $table->dropColumn(...)
unique / index unique() / dropUnique(), index() / dropIndex()
связь foreign(...) / dropForeign(...)

Таблицы и колонки опознаются по внутреннему id, а не по имени, поэтому переименование всегда остаётся переименованием, а не «удалить и создать заново». down() откатывает всё обратно.

Если база изменилась в обход редактора

Миграции не обязательно делать через редактор. Если их выполнили обычным php artisan migrate или поправили базу руками, редактор это заметит: при открытии схемы проекта и при возврате во вкладку он сверяет базу с последним коммитом. Если что-то разошлось, над холстом появляется плашка «The database changed outside the editor» со счётчиком изменений, кнопкой Details (что именно поменялось) и Refresh (подтянуть структуру из базы). Та же кнопка всегда есть в шапке: Refresh from database.

Сверка идёт «по смыслу». То, что база хранит по-своему (varchar(255) вместо string, datetime вместо timestamp в SQLite, 1 вместо true), изменением не считается. Пока в проекте есть невыполненные миграции, база законно отстаёт от схемы, и сверка не делается.

Окно коммита предупреждает:

  • о невыполненных миграциях проекта (сверка с таблицей migrations) — сначала стоит выполнить php artisan migrate;
  • о новых NOT NULL колонках без default в существующих таблицах — такая миграция упадёт, если в таблице есть строки;
  • об удалении таблиц и колонок — вместе с ними удаляются данные.

Не поддерживаются: составные индексы и внешние ключи (их редактор не трогает), смена первичного ключа.

Запись миграций в проект

В окне экспорта есть кнопка Save to project. Она пишет миграции по файлу на таблицу прямо в database/migrations в порядке зависимостей, с текущей меткой времени, так что они встают после уже существующих. Дальше — обычный php artisan migrate.

  • Если у таблиц уже есть миграции с тем же именем (create_users_table.php), редактор покажет их список и перезапишет только после подтверждения.
  • Имена таблиц и колонок попадают в PHP-код миграции, поэтому в проект записываются только обычные идентификаторы (латиница, цифры, _).
  • По умолчанию кнопка работает только в local-окружении: на проде браузер в код приложения не пишет.

Другие публикации:

php artisan vendor:publish --tag=cheap-sql-scheme-migrations   # миграции к себе в проект
php artisan vendor:publish --tag=cheap-sql-scheme-views        # Blade-обёртка страницы

Таблицы

Пакет создаёт sql_schemas, sql_tables, sql_columns и sql_relations.

Разработка

composer install
composer test                 # тесты Pest на Testbench

cd resources/js
npm install
npm run build                 # пересобрать интерфейс в dist/

Собранный dist/ коммитится вместе с кодом: его получают те, кто ставит пакет.

Лицензия

MIT