- Validation Cache - Caches database existence validation queries
- Column Validation - Validates column names in filter conditions
Validation Cache
TheValidatesExistenceInDatabase trait performs database existence checks during validation. These queries can be cached to reduce database load.
Enable Validation Cache
Master switch for validation query caching. When enabled, database existence checks are cached for the configured TTL.
Configure TTL
Time-to-live in seconds for cached validation results.Recommendation: Use a longer TTL (1+ hours) since table structures and validation rules rarely change during runtime.
Set Cache Prefix
Prefix for validation cache keys. Helps organize and identify validation-related cache entries.Example keys:
validation:products:exists:123validation:users:columns
Choose Database Connection
Database connection name used for validation queries.Use case: Route validation queries to a read replica to reduce load on the primary database.
Configuration Structure
Column Validation
Column validation ensures that filter conditions only reference valid database columns, preventing SQL injection and information disclosure.Enable Column Validation
Validates that column names in
oper filter conditions exist in the database table.When enabled:- Queries column list from database
- Checks filter columns against valid columns
- Caches column lists per table
- No column validation occurs (security risk)
Strict Column Validation
Enforces strict column validation behavior.When
true:- Invalid column names cause validation errors
- Request is rejected with 422 status
false:- Invalid columns are silently ignored
- Query proceeds with valid columns only
Column Cache TTL
Column lists are cached automatically to avoid repeated database schema queries:Column cache TTL is set in the config file, not via environment variable. To customize, publish and edit
config/rest-generic-class.php.Security Considerations
Always Enable in Production
Production Configuration
When to Disable
Only disable column validation in these scenarios:- Local development - For faster iteration without validation overhead
- Trusted internal tools - When all API consumers are internal and trusted
- Performance testing - To measure raw query performance
Performance Impact
Validation Cache Benefits
| Without Cache | With Cache |
|---|---|
| Database query per validation | Single query, cached for TTL |
| ~10-50ms per validation | ~0.1-1ms from cache |
| Increased DB load | Minimal DB load |
Column Validation Overhead
| First Request | Subsequent Requests |
|---|---|
| Schema query (~10-50ms) | Cached columns (~0.1ms) |
| One-time per table | No additional overhead |
Column lists are cached per table, so the overhead only occurs on the first request to each resource type.
Custom Validation Rules
You can extend validation behavior in your service classes:Custom Column Validation
Override Validation Connection
Custom Existence Validation
Filtering Configuration
Additional filtering safety limits are configured alongside column validation:Max Depth
Prevents excessively nested filter conditions:max_depth: 5, requests with more than 5 nesting levels are rejected.
Max Conditions
Limits total number of filter conditions:max_conditions: 100, requests with more than 100 total conditions are rejected.
Strict Relations
Requires explicit relation declarations in models:strict_relations: true, only relations listed in RELATIONS can be loaded via relations parameter.
Example Configurations
High-Security Production
Development Environment
Performance-Optimized
Troubleshooting
Column validation errors
Column validation errors
Error:
Invalid column 'xyz' in filter conditionsCause: Column doesn’t exist in the table or isn’t accessibleSolution:- Verify column name spelling
- Check if column exists in database:
DESCRIBE table_name - Clear column cache if schema changed:
php artisan cache:clear - If column exists but still fails, check
column_cache_ttland wait for cache expiry
Validation queries hitting primary database
Validation queries hitting primary database
Symptom: High load on primary database from validation queriesSolution: Route validation to read replicaEnsure
mysql_read is configured in config/database.php:Stale validation cache after schema changes
Stale validation cache after schema changes
Symptom: New columns not recognized or deleted columns still cachedSolution: Clear validation cacheOr clear specific validation cache keys:
Related Topics
Environment Variables
Complete reference of validation-related environment variables
Cache Strategy
Learn about response caching configuration
Filtering
Learn how filtering works with column validation