api-platform/doctrine-orm package extends API Platform (a modern PHP framework for building REST/GraphQL APIs) with Doctrine ORM integration, enabling seamless persistence for API resources. This is a critical fit for projects leveraging API Platform’s core abstractions (e.g., @ApiResource, hydration/serialization) while requiring relational database support.prePersist, postLoad) for custom logic, aligning with modern PHP architectures favoring decoupled workflows.doctrine/orm).graph TD
A[API Platform] --> B[api-platform/doctrine-orm]
B --> C[Doctrine ORM]
B --> D[Doctrine DBAL]
C --> D
@ApiResource classes.Gedmo for timestamps, slugs).fetch="EAGER" or DTOs, nested resources may trigger excessive queries.password) unless explicitly filtered via API Platform’s serialize/denormalize attributes.Doctrine\ORM\EntityManager mocks).Stof\DoctrineExtensionsBundle), behaviors (e.g., timestamps, slugs).api-platform/core, api-platform/admin, or api-platform/graphql.api-platform/doctrine-mongodb-odm instead).| Current State | Migration Steps | Risks |
|---|---|---|
| No ORM | 1. Add api-platform/doctrine-orm and doctrine/orm.2. Annotate entities with @ApiResource.3. Configure config/packages/doctrine.yaml.4. Replace raw SQL with Doctrine repositories. |
High initial refactor; may require rewriting data access layers. |
| Raw Doctrine ORM | 1. Ensure entities extend ApiPlatform\Metadata\ApiResource.2. Migrate custom repositories to use API Platform’s Operation system.3. Replace manual DQL with API Platform’s filters/sorters. |
Risk of breaking existing queries if not abstracted properly. |
| Eloquent (Laravel) | 1. Port entities to Doctrine (e.g., use Doctrine\ORM\Mapping as ORM).2. Replace Eloquent relationships with Doctrine annotations.3. Adapt migrations to Doctrine format. |
High effort; Laravel’s Eloquent is not directly compatible. |
| API Platform + Custom ORM | 1. Replace custom ORM with api-platform/doctrine-orm.2. Update hydration/serialization to use Doctrine metadata. |
Medium; depends on how deeply custom ORM is integrated. |
doctrine/orm and api-platform/core versions are compatible (check API Platform’s docs).composer require api-platform/doctrine-orm doctrine/orm
config/packages/doctrine.yaml:
doctrine:
orm:
mappings:
App:
is_bundle: false
dir: "%kernel.project_dir%/src/Entity"
prefix: "App\Entity"
alias: App
@ApiResource and Doctrine mappings:
use ApiPlatform\Metadata\ApiResource;
use Doctrine\ORM\Mapping as ORM;
#[ApiResource]
#[ORM\Entity]
class Book
{
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
private ?int $id = null;
#[ORM\Column]
private string $title;
}
prePersist callback to auto-generate slugs.EntityManager (use api-platform/core’s test utilities).Doctrine\ORM\EntityManager with an in-memory database (e.g., SQLite).php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
getOne, getCollection).@ApiResource attributes).How can I help you explore Laravel packages today?