muzammal/syncmodelfillable

A Laravel package to synchronize model fillable fields with migration columns using commands

1.5.0 2025-04-21 18:01 UTC

This package is auto-updated.

Last update: 2025-06-16 17:22:53 UTC


README

Latest Version on Packagist Total Downloads

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.

โœจ Features

  • ๐Ÿ› ๏ธ Syncs model $fillable properties with migration columns.
  • ๐Ÿ“ฆ Supports Laravel versions 8, 9, 10, 11, and 12.
  • โš™๏ธ Customizable to exclude specific columns, like timestamps.
  • ๐Ÿ”„ New:
    • The all flag now recursively scans all subdirectories inside app/Models/.
    • The --path= option allows selecting a custom directory for scanning models.
    • The --ignore flag lets you exclude specific models during sync.
    • ๐Ÿงน Cross-platform Pint support: Automatically formats the model file after updating the $fillable fields, ensuring proper code formatting on all operating systems (Windows, macOS, Linux).

๐Ÿš€ Installation

  1. Install the package via Composer:

    composer require muzammal/syncmodelfillable
  2. (Optional) Publish the configuration file:

    php artisan vendor:publish --tag=syncmodelfillable-config

    This will create a config/syncfillable.php file where you can specify columns to exclude (such as created_at, updated_at, deleted_at, etc.).

๐Ÿ“˜ Usage

This package provides an Artisan command sync:fillable to sync a model's $fillable fields with its database migration columns.

๐Ÿ”น Sync a Specific Model

To sync the $fillable fields of a specific model inside app/Models/, including nested folders run this:

php artisan sync:fillable Post

๐Ÿ”น Sync All Models (Including Nested Folders)

To sync all models inside app/Models/, including nested folders:

php artisan sync:fillable all

This will:

  • Scan all subdirectories inside app/Models/ (e.g., app/Models/Fintech/AnotherFolder/AnotherFolder).
  • Match each model with its migration file.
  • generate the $fillable properties accordingly.

๐Ÿ”น New: Custom Path for Models

You can specify a custom path instead of using app/Models/ by using the --path= option.

php artisan sync:fillable --path=app/CustomModels

This will:

  • Scan app/CustomModels/ instead of app/Models/.
  • Sync all models found in that directory.

๐Ÿ”น New: Exclude Models with the --ignore Flag

To exclude specific models from the sync operation:

php artisan sync:fillable all --ignore=User

You can also pass multiple models:

php artisan sync:fillable all --ignore=User,Product,Order

If syncing a single model, the --ignore flag is not applicable:

php artisan sync:fillable Product

โš™๏ธ Configuration

The 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'],
];

๐Ÿงน Cross-Platform Support for Pint

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. โœจ

๐Ÿ” Example

If your Post model has a migration defining name, slug, and content columns, running:

php artisan sync:fillable Post

Would 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.

๐Ÿ“œ License

This package is open-source software licensed under the MIT license.