# Models & Factories

**Package:** Laravel Modules | **Version:** 3 | **URL:** https://mozex.dev/docs/laravel-modules/v3/features/models-factories

---

## Overview

Wires Laravel's two guessing mechanisms so Eloquent works seamlessly inside modules:

- **Model → Factory**: `Modules\Blog\Models\Post::factory()` resolves to `Modules\Blog\Database\Factories\PostFactory`
- **Factory → Model**: `(new PostFactory)->modelName()` resolves to `Modules\Blog\Models\Post`

No runtime scanning is needed — two namespace-based resolvers handle the mapping using your configured sub-namespaces.

## Default configuration

```php
'models' => [
    'active' => true,
    'namespace' => 'Models\\',
],

'factories' => [
    'active' => true,
    'namespace' => 'Database\\Factories\\',
],
```

## How name guessing works

1. The module name is parsed from the fully-qualified class name (e.g., `Modules\Blog\Models\Post` → `Blog`)
2. The sub-namespace after the configured prefix is swapped:
   - `Models\Post` ↔ `Database\Factories\PostFactory`
   - `Models\Nested\Comment` ↔ `Database\Factories\Nested\CommentFactory`
3. For non-module classes, Laravel's default resolvers are used as fallback

## Directory layout

```
Modules/Blog/
├── Models/
│   ├── Post.php
│   └── Nested/
│       └── Comment.php
└── Database/
    └── Factories/
        ├── PostFactory.php
        └── Nested/
            └── CommentFactory.php
```

## Usage

```php
// Model → Factory
$factory = Modules\Blog\Models\Post::factory();

// Factory → Model
$modelClass = (new Modules\Blog\Database\Factories\PostFactory)->modelName();
```

## Configuration

- `'models.active' => false` disables Factory → Model guessing.
- `'factories.active' => false` disables Model → Factory guessing.
- Change `'models.namespace'` and `'factories.namespace'` to match your directory structure.

## IDE hint

IDEs may not pick up the custom resolvers. To help, set `$model` explicitly on factories:

```php
class PostFactory extends Factory
{
    protected $model = Post::class;
}
```

## See also

- [Policies](https://mozex.dev/docs/laravel-modules/v3/features/policies)
- [Seeders](https://mozex.dev/docs/laravel-modules/v3/features/seeders)

---

## Table of Contents

- [Introduction](https://mozex.dev/docs/laravel-modules/v3)
- [Support Us](https://mozex.dev/docs/laravel-modules/v3/support-us)
- [Requirements](https://mozex.dev/docs/laravel-modules/v3/requirements)
- [Changelog](https://mozex.dev/docs/laravel-modules/v3/changelog)
- [Contributing](https://mozex.dev/docs/laravel-modules/v3/contributing)
- [Questions & Issues](https://mozex.dev/docs/laravel-modules/v3/questions-and-issues)
- [About Mozex](https://mozex.dev/docs/laravel-modules/v3/about)

### Features

- [Blade Components](https://mozex.dev/docs/laravel-modules/v3/features/blade-components)
- [Views](https://mozex.dev/docs/laravel-modules/v3/features/views)
- [Routes](https://mozex.dev/docs/laravel-modules/v3/features/routes)
- [Configs](https://mozex.dev/docs/laravel-modules/v3/features/configs)
- [Migrations](https://mozex.dev/docs/laravel-modules/v3/features/migrations)
- [Seeders](https://mozex.dev/docs/laravel-modules/v3/features/seeders)
- [Commands](https://mozex.dev/docs/laravel-modules/v3/features/commands)
- [Helpers](https://mozex.dev/docs/laravel-modules/v3/features/helpers)
- [Models & Factories](https://mozex.dev/docs/laravel-modules/v3/features/models-factories)
- [Policies](https://mozex.dev/docs/laravel-modules/v3/features/policies)
- [Events & Listeners](https://mozex.dev/docs/laravel-modules/v3/features/events-listeners)
- [Service Providers](https://mozex.dev/docs/laravel-modules/v3/features/service-providers)
- [Translations](https://mozex.dev/docs/laravel-modules/v3/features/translations)
- [Caching](https://mozex.dev/docs/laravel-modules/v3/features/caching)
- [Listing Modules](https://mozex.dev/docs/laravel-modules/v3/features/listing)
- [Livewire Components](https://mozex.dev/docs/laravel-modules/v3/features/livewire-components)
- [Filament](https://mozex.dev/docs/laravel-modules/v3/features/filament)
- [Nova Resources](https://mozex.dev/docs/laravel-modules/v3/features/nova-resources)

### Integrations

- [PHPStan](https://mozex.dev/docs/laravel-modules/v3/integrations/phpstan)
- [PHPUnit](https://mozex.dev/docs/laravel-modules/v3/integrations/phpunit)
- [Pest](https://mozex.dev/docs/laravel-modules/v3/integrations/pest)