Skip to content

hereldar/doctrine-mapping

Repository files navigation

Doctrine Mapping

PHP Doctrine Code Coverage License

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'),
);

Supported Attributes

Currently under development.

About

An alternative Doctrine object mapper.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •