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.
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.
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.
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.
Database-First Validation:
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
];
Form Request Automation:
php artisan schema:generate-rules products --create-request --file StoreProductRequest
Requests/ directory for consistency.API-Specific Rules:
--file to namespace requests (e.g., Api/V1/StoreUserRequest):
php artisan schema:generate-rules users -cf --file Api\\V1\\StoreUserRequest
Partial Rule Generation:
email, name) to avoid clutter:
php artisan schema:generate-rules users --columns email,name
Dynamic Rule Overrides:
use LaravelSchemaRules\Traits\HasSchemaRules;
class BaseRequest extends FormRequest {
use HasSchemaRules;
protected function getSchemaRules(): array {
return $this->schemaRules(['custom_column' => ['unique:table']]);
}
}
Conditional Rule Generation:
'skip_columns' => [
'deleted_at',
'updated_at',
'created_at',
'user_id', // Custom skip
],
Testing Integration:
public function test_validation_rules_match_schema() {
$rules = $this->generateSchemaRules('users');
$this->assertArrayHasKey('email', $rules);
$this->assertContains('required', $rules['email']);
}
Multi-Tenant Isolation:
php artisan schema:generate-rules users --columns tenant_id,name,email
Floating-Point Precision:
numeric for float/decimal columns. For precise validation, manually add after:2 or digits:10,2:
'price' => ['required', 'numeric', 'after:0', 'digits:10,2'],
Foreign Key Quirks:
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
Nullable Fields:
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.Driver-Specific Issues:
jsonb columns generate json rules, but nested validation requires manual rules.min/max values for integer columns (e.g., max:2147483647 for integer).Config Overrides:
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']),
Inspect Raw Schema:
Schema::getColumnListing() to verify column names:
dd(Schema::getColumnListing('users')); // Check for typos in column names
Validate Generated Rules:
$validator = Validator::make(['email' => ''], $rules);
$this->assertTrue($validator->fails());
Force Overwrite Requests:
--force to overwrite existing Form Requests safely:
php artisan schema:generate-rules users --create-request --force
Custom Rule Extensions:
php artisan vendor:publish --tag="schema-rules-provider"
LaravelSchemaRules\Rules\RuleGenerator to add custom logic (e.g., for uuid fields).Cache Generated Rules:
$rules = cache()->remember('schema-rules.users', now()->addHours(1), function () {
return $this->generateSchemaRules('users');
});
CI/CD Integration:
# .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
Documentation Sync:
RULES.md file in your project with generated rules for onboarding:
php artisan schema:generate-rules users > docs/RULES.md
Database Migrations:
php artisan migrate --force
php artisan schema:generate-rules users --create-request
How can I help you explore Laravel packages today?