An alternative Doctrine object mapper that allows to configure entities in separate PHP files.
<?php
use ...
return Entity::of(
class: User::class,
)->withTable(
name: 'cms_users',
schema: 'main',
)->withFields(
Id::of(property: 'id', type: 'integer')
->withSequenceGenerator(sequenceName: 'cms_users_seq'),
Field::of(property: 'name', type: 'string')
->withColumn(length: 50, nullable: true, unique: true),
Field::of(property: 'email', type: 'string')
->withColumn(name: 'user_email', definition: 'CHAR(32) NOT NULL'),
)->withAssociations(
OneToOne::of(property: 'address', inversedBy: 'user', cascade: [Cascade::Remove])
->withJoinColumn(name: 'address_id', referencedColumnName: 'id', onDelete: 'CASCADE', onUpdate: 'CASCADE'),
OneToMany::of(property: 'phonenumbers', targetEntity: Phonenumber::class, mappedBy: 'user', cascade: [Cascade::Persist]),
ManyToMany::of(property: 'groups', targetEntity: Group::class, cascade: [Cascade::All])
->withJoinTable(name: 'cms_user_groups')
->withJoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: true, unique: false)
->withInverseJoinColumn(name: 'group_id', referencedColumnName: 'id', columnDefinition: 'INT NULL'),
)->withIndexes(
Index::of(fields: 'name', name: 'name_idx'),
Index::of(columns: 'user_email'),
)->withUniqueConstraints(
UniqueConstraint::of(columns: ['name', 'user_email'], name: 'search_idx'),
);- AssociationOverride
- AttributeOverride
- Column
- Cache
- ChangeTrackingPolicy
- CustomIdGenerator
- DiscriminatorColumn
- DiscriminatorMap
- Embeddable
- Embedded
- Entity
- GeneratedValue
- HasLifecycleCallbacks
- Index
- Id
- InheritanceType
- JoinColumn
- JoinTable
- ManyToOne
- ManyToMany
- MappedSuperclass
- OneToOne
- OneToMany
- OrderBy
- PostLoad
- PostPersist
- PostRemove
- PostUpdate
- PrePersist
- PreRemove
- PreUpdate
- SequenceGenerator
- Table
- UniqueConstraint
- Version
Currently under development.