Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Schema Rules Laravel Package

laracraft-tech/laravel-schema-rules

Generate baseline Laravel validation rules from your database schema. Create rules for entire tables or selected columns, generate Form Request classes, and configure columns to always skip. Works across supported drivers and serves as a solid starting point for custom validation.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require laracraft-tech/laravel-schema-rules --dev
    php artisan vendor:publish --tag="schema-rules-config"
    

    Verify the config file is published at config/schema-rules.php.

  2. First Use Case: Generate validation rules for a table (e.g., users) directly in your terminal:

    php artisan schema:generate-rules users
    

    Copy the output into your controller, Form Request, or validation logic.


Key Starting Points

  • Quick Validation Rules: Use the CLI to generate rules for any table without manual rule-writing.

  • Form Request Generation: Automate Form Request creation with --create-request:

    php artisan schema:generate-rules users --create-request
    

    This generates a StoreUserRequest (or custom-named) class in app/Http/Requests/.

  • Web Interface: Test rules interactively at validationforlaravel.com.


Implementation Patterns

Workflow Integration

  1. Database-First Validation:

    • Use the package as a starting point for validation rules, then refine manually.
    • Example: Generate rules for posts and override title to add starts_with:How to:
      $rules = [
          'title' => ['required', 'string', 'starts_with:How to'], // Custom rule
          // ... other rules from schema:generate-rules
      ];
      
  2. Form Request Automation:

    • Generate a Form Request for every table during feature development:
      php artisan schema:generate-rules products --create-request --file StoreProductRequest
      
    • Store these in a Requests/ directory for consistency.
  3. API-Specific Rules:

    • Use --file to namespace requests (e.g., Api/V1/StoreUserRequest):
      php artisan schema:generate-rules users -cf --file Api\\V1\\StoreUserRequest
      
  4. Partial Rule Generation:

    • Generate rules for specific columns (e.g., email, name) to avoid clutter:
      php artisan schema:generate-rules users --columns email,name
      

Advanced Patterns

  1. Dynamic Rule Overrides:

    • Extend the generated rules in a trait or base Form Request:
      use LaravelSchemaRules\Traits\HasSchemaRules;
      
      class BaseRequest extends FormRequest {
          use HasSchemaRules;
      
          protected function getSchemaRules(): array {
              return $this->schemaRules(['custom_column' => ['unique:table']]);
          }
      }
      
  2. Conditional Rule Generation:

    • Skip columns dynamically (e.g., soft-deletes) by extending the config:
      'skip_columns' => [
          'deleted_at',
          'updated_at',
          'created_at',
          'user_id', // Custom skip
      ],
      
  3. Testing Integration:

    • Use generated rules in PHPUnit tests to validate schema consistency:
      public function test_validation_rules_match_schema() {
          $rules = $this->generateSchemaRules('users');
          $this->assertArrayHasKey('email', $rules);
          $this->assertContains('required', $rules['email']);
      }
      
  4. Multi-Tenant Isolation:

    • Generate tenant-specific rules by filtering columns based on tenant context:
      php artisan schema:generate-rules users --columns tenant_id,name,email
      

Gotchas and Tips

Common Pitfalls

  1. Floating-Point Precision:

    • The package generates numeric for float/decimal columns. For precise validation, manually add after:2 or digits:10,2:
      'price' => ['required', 'numeric', 'after:0', 'digits:10,2'],
      
  2. Foreign Key Quirks:

    • Generated exists rules assume the referenced table’s primary key is id. Customize if using composite keys:
      'address_id' => ['required', 'exists:addresses,address_id'], // Custom column
      
  3. Nullable Fields:

    • The package adds nullable for nullable columns, but required fields without defaults may still need explicit required rules if the schema allows NULL but your logic doesn’t.
  4. Driver-Specific Issues:

    • PostgreSQL: jsonb columns generate json rules, but nested validation requires manual rules.
    • SQLite: May generate less precise min/max values for integer columns (e.g., max:2147483647 for integer).
  5. Config Overrides:

    • The skip_columns config is case-sensitive and defaults to ['deleted_at', 'updated_at', 'created_at']. Add your own:
      'skip_columns' => array_merge(config('schema-rules.skip_columns'), ['temp_column']),
      

Debugging Tips

  1. Inspect Raw Schema:

    • Use Laravel’s Schema::getColumnListing() to verify column names:
      dd(Schema::getColumnListing('users')); // Check for typos in column names
      
  2. Validate Generated Rules:

    • Test rules against edge cases (e.g., empty strings, max values):
      $validator = Validator::make(['email' => ''], $rules);
      $this->assertTrue($validator->fails());
      
  3. Force Overwrite Requests:

    • Use --force to overwrite existing Form Requests safely:
      php artisan schema:generate-rules users --create-request --force
      
  4. Custom Rule Extensions:

    • Extend the package’s rule logic by publishing and modifying the service provider:
      php artisan vendor:publish --tag="schema-rules-provider"
      
    • Override LaravelSchemaRules\Rules\RuleGenerator to add custom logic (e.g., for uuid fields).

Performance and Maintenance

  1. Cache Generated Rules:

    • Store generated rules in a config file or cache them to avoid regenerating:
      $rules = cache()->remember('schema-rules.users', now()->addHours(1), function () {
          return $this->generateSchemaRules('users');
      });
      
  2. CI/CD Integration:

    • Add a pre-commit hook or GitHub Action to validate that all Form Requests match their schemas:
      # .github/workflows/validate-schema-rules.yml
      jobs:
        validate:
          runs-on: ubuntu-latest
          steps:
            - run: php artisan schema:generate-rules users --columns email,name | diff - users-request-rules.txt
      
  3. Documentation Sync:

    • Keep a RULES.md file in your project with generated rules for onboarding:
      php artisan schema:generate-rules users > docs/RULES.md
      
  4. Database Migrations:

    • Regenerate rules after migrations to ensure validation stays in sync:
      php artisan migrate --force
      php artisan schema:generate-rules users --create-request
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope