SyncModelFillable is a Laravel package designed to help automatically add or update a model's $fillable fields with its database migration columns. 🎉 With just a simple Artisan command.
- 🛠️ Syncs model
$fillableproperties with migration columns. - 📦 Supports Laravel versions 8, 9, 10, 11, and 12.
- ⚙️ Customizable to exclude specific columns, like timestamps.
- 🔄 New:
- The
allflag now recursively scans all subdirectories insideapp/Models/. - The
--path=option allows selecting a custom directory for scanning models. - The
--ignoreflag lets you exclude specific models during sync. - 🧹 Cross-platform Pint support: Automatically formats the model file after updating the
$fillablefields, ensuring proper code formatting on all operating systems (Windows, macOS, Linux).
- The
-
Install the package via Composer:
composer require muzammal/syncmodelfillable
-
(Optional) Publish the configuration file:
php artisan vendor:publish --tag=syncmodelfillable-config
This will create a
config/syncfillable.phpfile where you can specify columns to exclude (such ascreated_at,updated_at,deleted_at, etc.).
This package provides an Artisan command sync:fillable to sync a model's $fillable fields with its database migration columns.
To sync the $fillable fields of a specific model inside app/Models/, including nested folders run this:
php artisan sync:fillable PostTo sync all models inside app/Models/, including nested folders:
php artisan sync:fillable allThis will:
- Scan all subdirectories inside
app/Models/(e.g.,app/Models/Fintech/AnotherFolder/AnotherFolder). - Match each model with its migration file.
- generate the
$fillableproperties accordingly.
You can specify a custom path instead of using app/Models/ by using the --path= option.
php artisan sync:fillable --path=app/CustomModelsThis will:
- Scan app/CustomModels/ instead of
app/Models/. - Sync all models found in that directory.
To exclude specific models from the sync operation:
php artisan sync:fillable all --ignore=UserYou can also pass multiple models:
php artisan sync:fillable all --ignore=User,Product,OrderIf syncing a single model, the --ignore flag is not applicable:
php artisan sync:fillable ProductThe configuration file syncfillable.php allows you to exclude certain columns from $fillable. By default, common timestamp columns (created_at, updated_at, deleted_at) are excluded.
Example configuration:
return [
'excluded_columns' => ['created_at', 'updated_at', 'deleted_at'],
];After updating the $fillable fields, the model file will be automatically formatted using Pint. This ensures that your code is properly formatted on all operating systems, including Windows, macOS, and Linux.
- On Windows, Pint is run via
vendor\\bin\\pint.bat. - On macOS/Linux, Pint is executed with
./vendor/bin/pint.
This ensures your code maintains consistency and adheres to best practices without requiring manual formatting. ✨
If your Post model has a migration defining name, slug, and content columns, running:
php artisan sync:fillable PostWould automatically generate $fillable in Post.php
protected $fillable = ['name', 'slug', 'content'];Additionally, after updating the $fillable fields, the Post.php file will be formatted to ensure clean code.
This package is open-source software licensed under the MIT license.