khairy/migration-model-sync
Composer 安装命令:
composer require khairy/migration-model-sync
包简介
Automatically sync Laravel models from migration files, including fillable, casts, and relationships.
关键字:
README 文档
README
Laravel Migration Model Sync is a development tool that automatically generates or synchronizes Eloquent model files based on your migration files. It extracts columns, data types, and foreign key relationships and applies them directly to your model"s $fillable, $casts, and relationship methods.
🚀 Features
- 🔄 Sync existing models: Adds missing
$fillable,$casts, and relationships - 🧱 Generate new models: Creates clean models directly from migrations
- 🧠 Smart relationship inference:
belongsTofrom foreign keyshasMany,hasOne, andbelongsToMany
- 🗃 Supports both Laravel default and custom migration styles
- 📁 Easily configurable via
config/modelsync.php - ✨ Sync all models: A new
model:sync-allcommand to synchronize all models from available migration files. - 🛠 Generate migrations from models:
model:generate-migration User— creates a migration file for a specific model - 🛠 Generate migrations from models:
model:generate-migrations— auto-generates all migration files from models (with dependency-aware sorting)
📦 Installation
Laravel versions supported: 8.x – 12.x
1. If using from Packagist:
composer require khairy/migration-model-sync
2. Publish the Configuration
php artisan vendor:publish --tag=modelsync-config
This creates the config file: config/modelsync.php
⚙️ Configuration
Edit config/modelsync.php to customize behavior:
return [ \"model_path\" => app_path(\"Models\"), \"ignore_columns\" => [ \"created_at\", \"updated_at\", ], \"relationship_overrides\" => [ // \"created_by\" => \"belongsTo:App\\Models\\User\" ], ];
- model_path: Specifies the directory where generated models will be stored. By default, this is
app/Models. - ignore_columns: An array of column names that should be excluded from the
$fillableand$castsproperties of the generated models. Common examples includecreated_atandupdated_at. - relationship_overrides: Allows you to manually define or override specific relationship definitions for models. This is useful for complex or non-standard relationships that cannot be automatically inferred.
🧪 Usage
Sync a single model
php artisan model:sync User
This command will:
- Parse the migration that created
userstable - Add
$fillable,$casts, and anybelongsTorelationships toapp/Models/User.php
Sync all models
php artisan model:sync-all
This command will:
- Iterate through all migration files that create tables
- Parse each migration to extract schema information
- Generate or update the corresponding Eloquent model with
$fillable,$casts, and inferredbelongsTorelationships.
Generate migration file from model class
php artisan model:generate-migration User
This command will:
- Read
app/Models/User.php - Extract
$fillable,$casts, and anybelongsTo()relationships - Infer column types
(string, timestamp, json, etc.) - Generate a
create_users_table.phpmigration indatabase/migrations - Include
foreignId()->constrained()->on(...)ifbelongsTo()is present - Automatically add
timestampsandsoft deletesif applicable
Generate migration files from model classs
php artisan model:generate-migrations
This command will:
- Loop through all model classes in app/Models/
- Read their
$fillable,$casts, andbelongsTo()methods - Generate new
create_*_table.phpmigration files - Sort migrations by relationship dependency (by default)
- Automatically set timestamps to maintain migration order
- Use options like
--only=User,Post,--except=Log,--sort=none, and--forcefor advanced control.
Example Migration
Schema::create(\"profiles\", function (Blueprint $table) { $table->id(); $table->string(\"name\"); $table->string(\"email\"); $table->timestamp(\"email_verified_at\")->nullable(); $table->string(\"password\"); $table->foreignId(\"user_id\")->constrained(); $table->timestamps(); });
Resulting Model
namespace App\\Models; use Illuminate\\Database\\Eloquent\\Model; class Profile extends Model { protected $fillable = [\"name\", \"email\", \"email_verified_at\", \"password\", \"user_id\"]; protected $casts = [ \"email_verified_at\" => \"datetime\", \"created_at\" => \"datetime\", \"updated_at\" => \"datetime\", ]; public function user() { return $this->belongsTo(User::class); } }
💡 How Relationships Are Inferred
| Relation Type | Detection Logic |
|---|---|
| belongsTo | foreignId(\"user_id\")->constrained() or foreign key chains |
| hasMany | Inferred from other tables containing a foreign key to this model (todo) |
| hasOne | Inferred from profiles, settings, etc. (todo) |
| belongsToMany | Detected from pivot tables like role_user (todo) |
🧩 Extending the Package
You can override default behavior:
- Use
relationship_overridesin config to manually define model relations - You can also stub and customize the model template (coming soon)
🤝 Contributing
Pull requests are welcome! Please fork the repo, improve, and submit a PR. For major changes, open an issue first.
📄 License
MIT License © Khairy
🌐 Links
khairy/migration-model-sync 适用场景与选型建议
khairy/migration-model-sync 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 34 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 08 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 khairy/migration-model-sync 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 khairy/migration-model-sync 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 khairy/migration-model-sync 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Alfabank REST API integration
Laravel package for Accurate Online API integration.
Shared RCX Laravel DataTables UI and configuration helpers.
Boot a Laravel project on any machine with one command: app:serve installs missing tools (PHP, Node, Composer, Herd, Docker), creates .env, sets up the database, runs migrations, builds assets, starts a queue worker and serves via Herd, Sail or artisan serve; app:down cleanly stops everything it sta
Branded, diagnostic error pages (500, 403, 404, 419, 503) for Filament — native Filament UI, dark mode and translations out of the box.
Turn any PDF into a Pingen-ready A4 letter (generated address cover page + A4 normalisation + safe margins) and send it through the Pingen print & mail API. Laravel-first.
统计信息
- 总下载量: 34
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-08-15