latevaweb/laravel-custom-properties
saving, retrieved), reducing boilerplate for custom attribute logic.custom_properties JSON column, which may complicate migrations or schema evolution.attributes or casts behavior.custom_properties column may require downtime or careful migration sequencing.custom_properties concurrently?JsonSerializable for consistent serialization.DB::raw for queries).Str::of()).User, Product).Schema::table('users', function (Blueprint $table) {
$table->json('custom_properties')->nullable()->after('updated_at');
});
custom_properties_text column as a fallback for non-JSON databases.use LaTevaWeb\CustomProperties\HasCustomProperties;
class User extends Model {
use HasCustomProperties;
protected $casts = [
'custom_properties' => 'array', // Optional: Auto-cast JSON to array
];
}
json_encode/json_decode shims).LogEntry) to test performance and edge cases.Product metadata).User preferences) after validating concurrency.is_premium → custom_properties['subscription']['tier']).addColumn migrations).jsonb in PostgreSQL).ALTER TABLE ... ALTER COLUMN custom_properties TYPE jsonb USING custom_properties::jsonb).custom_properties simultaneously. Mitigate with:
SELECT ... FOR UPDATE).pg_lzcompress in PostgreSQL).custom_properties grows unbounded.| Scenario | Impact | Mitigation |
|---|---|---|
| JSON corruption | Data loss or runtime errors | Validate JSON on read/write; use backups. |
| Concurrent write conflicts | Lost updates or deadlocks | Implement optimistic locking. |
| Laravel version mismatch | Package incompatibility | Pin to specific Laravel version in composer.json. |
| Large payloads (>1MB) | Timeouts or memory issues | Enforce size limits; compress data. |
| Migration failures | Schema inconsistencies | Test migrations in staging; use rollback. |
whereJsonContains).null values, malformed data.DateTime, Collection).How can I help you explore Laravel packages today?