fnayou
3/17/2017 - 3:30 PM

Doctrine YAML configuration reference

Doctrine YAML configuration reference

# Inspired from http://blog.hio.fr/2011/09/17/doctrine2-yaml-mapping-example.html

MyEntity:
  type: entity
  repositoryClass: MyRepositoryClass
  table: my_entity
  namedQueries:
    all: "SELECT u FROM __CLASS__ u"

  # Class-Table-Inheritance
  inheritanceType: joined
  discriminatorColumn:
    name: type
    type: string
  discriminatorMap:
    class1: MyClass1
    class2: MyClass2

  id:
    id:
      type: integer
      generator:
        strategy: AUTO
      sequenceGenerator:
        sequenceName: tablename_seq
        allocationSize: 100
        initialValue: 1

  fields:
    name:
      type: string
      length: 50
      nullable: true
      unique: true
    email:
      type: string
      column: user_email
      columnDefinition: CHAR(32) NOT NULL

  oneToOne:
    address:
      targetEntity: Address
      inversedBy: user
      joinColumn:
        name: address_id
        referencedColumnName: id
        onDelete: CASCADE
        onUpdate: CASCADE
      cascade: [ remove ]

  oneToMany:
    phonenumbers:
      targetEntity: PhoneNumber
      orphanRemoval: true
      mappedBy: user
      orderBy:
        number: ASC
      cascade: [ persist ]
      fetch: EAGER

  # ManyToMany unidirectionnal
  manyToMany:
    groups:
      targetEntity: Group
      joinTable:
        name: users_groups
        joinColumns:
          user_id:
            referencedColumnName: id
        inverseJoinColumns:
          group_id:
            referencedColumnName: id

  # ManyToMany bidirectionnal
  manyToMany:
    groups:
      targetEntity: Group
      inversedBy: users
      joinTable:
        name: users_groups
        joinColumns:
          user_id:
            referencedColumnName: id
            nullable: false
            unique: false
        inverseJoinColumns:
          group_id:
            referencedColumnName: id
            columnDefinition: INT NULL
      cascade:
        - all
  # Inverse side
  Group:
    type: entity
    manyToMany:
      users:
        targetEntity: User
        mappedBy: groups

  manyToOne:
    securityLevel:
      targetEntity: SecurityLevel
      inversedBy: users
      joinColumn:
        name: securitylevel_id
        referencedColumnName: id
        nullable: false

  # Referencing an entity with a multiple columns primary key
  manyToOne:
    location:
      targetEntity: Location
      joinColumns:
        - name: location_latitude
          referencedColumnName: latitude
          nullable: false
        - name: location_longitude
          referencedColumnName: longitude
          nullable: false

  lifecycleCallbacks:
    prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ]
    postPersist: [ doStuffOnPostPersist ]
    preUpdate: [ preUpdate ]
    preRemove: [ preDelete ]
    postLoad: [ postLoad ]

  uniqueConstraints:
    search_idx:
      columns: [name, user_email]

  indexes:
    name_idx:
      columns: name
    0:
      columns: user_email