Powerful visual editor for Doctrine 2

Import, edit and export Doctrine 2 definitions just in a few clicks.

Speed up your work and avoid routine.

Entity
Bundle
Project
Skipper diagram - entitySkipper diagram - bundleSkipper diagram - project

1. Visually edit your project model.

Attributes
Annotations
XML
YML
<?php
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Table(name: "ecommerce_order", options: ["charset"=>"utf8","collate"=>"utf8_unicode_ci"])]
#[ORM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")]
class EcommerceOrder
{
    #[ORM\Id]
    #[ORM\Column(type: "integer")]
    #[ORM\GeneratedValue(strategy: "AUTO")]
    private $id;

    #[ORM\Column(type: "timestamp", length: 255, nullable: true)]
    private $ordered_at;

    #[ORM\Column(type: "string", nullable: true)]
    private $customer_note;

    #[ORM\Column(type: "string", nullable: true)]
    private $internal_note;

    #[ORM\OneToOne(targetEntity: "Address", inversedBy: "EcommerceOrders")]
    #[ORM\JoinColumn(name: "billing_address_id", referencedColumnName: "id", unique: true)]
    private $BillingAddress;

    #[ORM\OneToOne(targetEntity: "Address", inversedBy: "EcommerceOrdersDelivery")]
    #[ORM\JoinColumn(name: "delivery_address_id", referencedColumnName: "id", unique: true)]
    private $DeliveryAddress;
}
<?php
use Doctrine\ORM\Mapping AS ORM;

/**
 * @ORM\Entity
 * @ORM\Table(schema="ecommerce_order", options={"charset":"utf8","collate":"utf8_unicode_ci"})
 * @ORM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")
 */
class EcommerceOrder
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", length=4, options={"unsigned":true})
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     */
    private $id;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $ordered_at;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $customer_note;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $internal_note;

    /**
     * @ORM\OneToOne(targetEntity="Address")
     * @ORM\JoinColumn(name="billing_address_id", referencedColumnName="id", unique=true)
     */
    private $BillingAddress;

    /**
     * @ORM\ManyToOne(targetEntity="Address")
     * @ORM\JoinColumn(name="delivery_address_id", referencedColumnName="id")
     */
    private $DeliveryAddress;
}
<?xml version="1.0"?>
<doctrine-mapping
 xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
 xsi="http://www.w3.org/2001/XMLSchema-instance"
 schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity
	 name="EcommerceOrder"
	 change-tracking-policy="DEFERRED_IMPLICIT"
	 schema="ecommerce_order"
	 repository-class="Doctrine\ORM\EntityRepository">
    <id name="id" type="integer" length="4">
      <generator strategy="SEQUENCE"/>
      <options>
        <option name="unsigned" value="true"/>
      </options>
    </id>
    <field name="ordered_at" type="datetime" nullable="true"/>
    <field name="customer_note" type="string" nullable="true" version="true"/>
    <field name="internal_note" type="string" nullable="true" version="true"/>
    <many-to-one field="DeliveryAddress" target-entity="Address">
      <join-columns>
        <join-column
					 name="delivery_address_id"
					 referenced-column-name="id"
					 on-delete="CASCADE"/>
      </join-columns>
    </many-to-one>
    <one-to-one field="BillingAddress" target-entity="Address">
      <join-columns>
        <join-column
					 name="billing_address_id"
					 referenced-column-name="id"
					 unique="true"
					 on-delete="CASCADE"/>
      </join-columns>
    </one-to-one>
    <options>
      <option name="charset" value="utf8"/>
      <option name="collate" value="utf8_unicode_ci"/>
    </options>
  </entity>
</doctrine-mapping>
EcommerceOrder:
  type: entity
  changeTrackingPolicy: DEFERRED_IMPLICIT
  schema: ecommerce_order
  repositoryClass: Doctrine\ORM\EntityRepository
  fields:
    id:
      id: true
      type: integer
      length: 4
      generator:
        strategy: SEQUENCE
      options:
        unsigned: true
    ordered_at:
      type: datetime
      nullable: true
    customer_note:
      type: string
      nullable: true
      version: true
    internal_note:
      type: string
      nullable: true
      version: true
  options:
    charset: utf8
    collate: utf8_unicode_ci
  oneToOne:
    BillingAddress:
      targetEntity: Address
      joinColumns:
        billing_address_id:
          referencedColumnName: id
          unique: true
          onDelete: CASCADE
  manyToOne:
    DeliveryAddress:
      targetEntity: Address
      joinColumns:
        delivery_address_id:
          referencedColumnName: id
          onDelete: CASCADE

2. Export it to complete definition files.


Why use Skipper

Simple Project import

With sophisticated import wizard you can import your existing Doctrine 2 projects in just a few clicks. Created visual model allows you to discover complete project logic simply and quickly.

Skipper file menuSkipper Doctrine2 import wizardSkipper Doctrine2 import wizard - definition filesSkipper imported Doctrine2 project

Definitions exported by one click

You can export your Doctrine 2 project repeatedly and as many times as you need. Exported definitions are in standardized and ready-to-use format without the need of further editing.

Skipper Doctrine2 export settingsSkipper Doctrine2 export resultsDoctrine2 definitions exported by Skipper

Editing in visual interface

Intuitive wizards and dialogs guide you through editing of all objects. Each change in model is properly transferred to the definition files in the moment of their export.

Skipper entity editor for Doctrine2Skipper bundle editor for Doctrine2Skipper Association editor for Doctrine2

Lower need of Doctrine 2 skills

Thanks to Skipper inbuilt value advisors, validators, assistants and definitions created via standardized templates you can stop worrying about Doctrine 2 syntax and keywords.

Skipper Doctrine2 property editor - tracking policies, entity listenerSkipper Doctrine2 property editor - lifecycle callbackSkipper editing Doctrine2 fields

See all the features


Support for all Doctrine 2 features

Supported formats

All standard formats for Doctrine 2 are supported. You can import and export XML, YML (YAML) as well as PHP annotations and PHP attributes.

Skipper Doctrine2 xml export resultSkipper Doctrine2 yml export resultSkipper Doctrine2 annotations export result

Entities and modules

Create entities, change their fields and ORM properties or simply remove them from the model. Use colors to create logical units and make orientation in the model easier.

Skipper diagram of Doctrine2 entities and associationsEditing Doctrine2 fields, associations and inheritance in SkipperSkipper visual model of Doctrine2 project

Associations

With smart wizards you can create all types of Doctrine 2 associations. Use one to one, one to many and many to many associations and define owner and inverse entity or MN entity and aliases.

Skipper Doctrine2 Many-to-Many wizardSkipper Doctrine2 Association wizardSkipper Doctrine2 Many-to-Many editorSkipper Doctrine2 Association editor

Inheritance

Easy to understand dialog guides you through Doctrine 2 inheritance creation. In one place you can edit inheritance type, discriminators and base and derived entity.

Skipper Doctrine2 inheritance wizardSkipper Doctrine2 inheritance editor

Indexes

Create indexes and manage them with the help of intuitive Entity Editor. Specify all indexes you need and which fields are indexed by them.

Skipper Doctrine2 index editor

ORM Properties

Alter all model properties as needed. Skipper unique Property Editor provides quick and easy way to create, edit or delete any value.

Skipper Doctrine2 property editor - attributes and optionsSkipper Doctrine2 property editor - tracking policySkipper Doctrine2 property editor - lifecycle callback

Customization

Implement your own customizations to Skipper so it maximally suits your needs. Create new behaviors, configure custom properties or datatypes or connect Skipper with external tools.

Support for MVC frameworks

With Skipper you can use Symfony, Zend or other MVC framework without any limitation. Skipper exports definitions with support for any MVC framework.

See all the features

Over 5,000 companies use Skipper every day

Thomas Somoen, Try/Apt

We have good use of the tool. It simplifies our daily work, saves us time and is simple and intuitive to use.

Thomas Somoen, Try/Apt

Herman Peeren, Yepr

It is faster and gives less errors to have Skipper create the mapping code instead of writing it myself. Later in the development process I often use the Skipper diagram as a quick reference.

Herman Peeren, Yepr

Detailed List of supported Doctrine 2 ORM properties

Skipper model properties

ObjectProperty
Projectname, storage path, description
Modulename, namespace, description, external plugin storage, export path and format
Entityname, namespace, description
Fieldname, type, size, required, unique, primary key, auto increment, default value, enum values, description
Associationowner/inverse entity, reference fields, owner/inverse alias, association type (one-to-one, one-to-many), parent requirement, description
Many to Manymn entity, owner/inverse entity, reference fields, owner/inverse alias, description
Inheritancebase/derived entity, inheritance type, discriminator value/field, description
Indexname, unique, indexed fields, description

Doctrine 2 ORM model properties

ObjectProperty
Project-
Modulenamespace, file-suffix (.dcm, .orm, without-suffix), filename-format (with-namespace, entity-only)
Entitytable, schema, repository-class, export-file-name, change-tracking-policy (DEFERRED_IMPLICIT, DEFERRED_EXPLICIT, NOTIFY), lifecycle-callbacks(type, method)
Fieldcolumn, version, scale, precision, column-definition, generator (strategy), sequence-generator (sequence-name, allocation-size, initial-value)
AssociationonDelete, onUpdate, orderBy, side-owning / side-inverse (fetch, orphan-removal, cascade, order-by)
Many to Manyjoin-table-schema, fetch, on-delete, on-update, cascade, order-by
Inheritance-

Doctrine 2 ORM datatypes support

  • string

  • integer

  • smallint

  • bigint

  • boolean

  • decimal

  • date

  • time

  • datetime

  • text

  • object

  • array

Doctrine 2 ORM inheritance support

  • SINGLE_TABLE

  • JOINED

  • MAPPED_SUPERCLASS

Doctrine 2 ORM associations support

  • Doctrine 2 One to one (one-to-one)

  • Doctrine 2 One to many (one-to-many)

  • Doctrine 2 Many to one (many-to-one)

  • Doctrine 2 Many to many (many-to-many)

Doctrine 2 ORM model import / export formats

  • XML definitions

  • YAML (YML) definitions

  • PHP Annotations

  • PHP Attributes