> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unleash-commerce.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Models Reference

> List of core models and their corresponding contracts

## Core Models

All core models are available as contracts that can be swapped for custom implementations.

| Model         | Contract              | Namespace                                     |
| ------------- | --------------------- | --------------------------------------------- |
| Product       | ProductContract       | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Category      | CategoryContract      | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Page          | PageContract          | `Esign\UnleashCommerce\Core\Contracts\Models` |
| User          | UserContract          | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Customer      | CustomerContract      | `Esign\UnleashCommerce\Core\Contracts\Models` |
| CustomerUser  | CustomerUserContract  | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Order         | OrderContract         | `Esign\UnleashCommerce\Core\Contracts\Models` |
| CartLine      | CartLineContract      | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Address       | AddressContract       | `Esign\UnleashCommerce\Core\Contracts\Models` |
| Role          | RoleContract          | `Esign\UnleashCommerce\Core\Contracts\Models` |
| MediaDownload | MediaDownloadContract | `Esign\UnleashCommerce\Core\Contracts\Models` |

## Associating with Custom Models

Register custom models in the ModelManifest:

```php theme={null}
use Esign\UnleashCommerce\Core\Facades\ModelManifest;
use Esign\UnleashCommerce\Core\Contracts\Models\Product as ProductContract;

ModelManifest::add(ProductContract::class, CustomProduct::class);
```

## Morphing Models

Core models are registered in a morph map for polymorphic relationships:

```php theme={null}
Relation::morphMap([
    'product' => Product::modelClass(),
    'category' => Category::modelClass(),
    'page' => Page::modelClass(),
    'mediaentry' => MediaEntry::modelClass(),
]);
```
