<critical_constraints>
❌ NO request()->all() → use FormRequest validation
❌ NO fat controllers (>10 lines) → extract to Service/Action
❌ NO -m flag for Mongo → schema-less, migrations only for indexes
✅ MUST detect DB driver from composer.json first
✅ MUST return new <Name>Resource($model) always
✅ MUST generate test: make:test <Name>Test
</critical_constraints>
<model_blueprint>
php
declare(strict_types=1);
use MongoDB\Laravel\Eloquent\Model; // or appropriate base
use MongoDB\Laravel\Eloquent\SoftDeletes; // driver-specific
class Example extends Model {
use SoftDeletes;
protected $connection = 'mongodb'; // for Mongo only
protected $dates = ['deleted_at']; // for legacy Mongo
}
</model_blueprint>
<migration_strategy>
- •SQL: ALWAYS generate migration with
$table->softDeletes() - •Mongo: Skip table migration, create index migration only
- •Always index: slug, email, foreign keys </migration_strategy>
<controller_rules>
- •Response:
new <Name>Resource($model) - •Input: FormRequest only
- •Routing: scoped bindings
/users/{user}/posts/{post} - •Side effects: use Observer, not Controller </controller_rules>
<mongo_gotchas>
- •No
->join()→ use->with()or embedding - •Careful with
like→ prefer regex/text search at volume - •Hybrid relations may fail → use manual lookups in Accessors </mongo_gotchas>