Powerful visual editor for Laravel Eloquent

Edit and export Laravel Eloquent definitions just in a few clicks.

Speed up your work and avoid routine.

  • Entity
  • Module
  • Project
Skipper diagram - entity Skipper diagram - module Skipper diagram - project

1.Visually edit your project model.

  • Migrations
  • Base Model
  • Model
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class Migrations20190306091702 extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
  */
  public function up()
  {
    Schema::create('ecommerce_orders', function (Blueprint $table) {
      $table->integer('id')->autoIncrement()->nullable(true);
      $table->integer('ecommerce_order_state_id')->nullable(true);
      $table->integer('contact_id')->nullable(true);
      $table->integer('delivery_address_id')->nullable(true);
      $table->integer('billing_address_id')->nullable(true)->unique();
      $table->timestamp('ordered_at')->nullable(true);
      $table->string('customer_note')->nullable(true);
      $table->string('internal_note')->nullable(true);
    });
    Schema::create('ecommerce_order_simple_items', function (Blueprint $table) {
      $table->integer('id')->autoIncrement()->nullable(true);
      $table->integer('ecommerce_order_id');
      $table->string('name',255);
      $table->float('quantity')->nullable(true);
    });
    Schema::create('ecommerce_order_items', function (Blueprint $table) {
      $table->integer('id')->autoIncrement()->nullable(true);
      $table->integer('ecommerce_order_id');
      $table->integer('product_id');
      $table->float('quantity')->nullable(true);
    });
    Schema::table('ecommerce_order_items', function (Blueprint $table) {
      $table->foreign('ecommerce_order_id')->references('id')->on('ecommerce_orders');
    });
    Schema::table('ecommerce_order_simple_items', function (Blueprint $table) {
      $table->foreign('ecommerce_order_id')->references('id')->on('ecommerce_orders');
    });
  }
  /**
   * Reverse the migrations.
   *
   * @return void
  */
  public function down()
  {
    Schema::table('ecommerce_order_simple_items', function (Blueprint $table) {
      $table->dropForeign(['ecommerce_order_id']);
    });
    Schema::table('ecommerce_order_items', function (Blueprint $table) {
      $table->dropForeign(['ecommerce_order_id']);
    });
    Schema::dropIfExists('ecommerce_orders');
    Schema::dropIfExists('ecommerce_order_simple_items');
    Schema::dropIfExists('ecommerce_order_items');
  }
}
<?php
namespace App\Models\Base;
use Illuminate\Database\Eloquent\Model;
 
class EcommerceOrder extends Model
{
  /**  
  * Do not automatically manage timestamps by Eloquent
  * 
  * @var bool
  */
  protected $timestamps=false;
  /**  
  * The attributes that should be cast to native types.
  * 
  * @var array
  */
  protected $casts=[
    'id'=>'integer',
    'ecommerce_order_state_id'=>'integer',
    'contact_id'=>'integer',
    'delivery_address_id'=>'integer',
    'billing_address_id'=>'integer',
    'ordered_at'=>'datetime',
    'customer_note'=>'string',
    'internal_note'=>'string'
  ];
  /**  
  * The guarded property should contain an array of attributes that you do not want to be mass assignable.
  * 
  * @var array
  */
  protected $is_guarded=['internal_note'];
  /**  
  * The attributes that are mass assignable.
  * 
  * @var array
  */
  protected $is_fillable=[
    'id',
    'ecommerce_order_state_id',
    'contact_id',
    'delivery_address_id',
    'billing_address_id',
    'ordered_at',
    'customer_note'
  ];
  public function Contact()
  {
    return $this->belongsTo('\App\Models\Contact','contact_id','id');
  }
  public function DeliveryAddress()
  {
    return $this->belongsTo('\App\Models\Address','delivery_address_id','id');
  }
  public function BillingAddress()
  {
    return $this->belongsTo('\App\Models\Address','billing_address_id','id');
  }
  public function OrderItem()
  {
    return $this->hasMany('\App\Models\EcommerceOrderItem','ecommerce_order_id','id');
  }
  public function OrderSimpleItem()
  {
    return $this->hasMany('\App\Models\EcommerceOrderSimpleItem','ecommerce_order_id','id');
  }
}
<?php
namespace App\Models;
 
class EcommerceOrder extends \App\Models\Base\EcommerceOrder
{
}

2.Export it to complete definition files.

Download 14-day trial version

Try Skipper for free. No credit card needed.


Why use Skipper

Simple Project import

Sophisticated import wizard allows you to import your existing Laravel Eloquent projects from the database in just a few clicks. The created visual model shows you complete project logic simply and quickly.

Skipper file menu Skipper Laravel import wizard Skipper Laravel import wizard - definition files Skipper imported Laravel project

Definitions exported by one click

You can export your Laravel Eloquent project repeatedly and as many times as you need. Exported definitions are in a standardized and ready-to-use format without a need for further editing.

Skipper Laravel export settings Skipper Laravel export results Laravel migrations exported by Skipper Laravel base model class exported by Skipper

Editing in visual interface

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

Skipper entity editor for Laravel Skipper bundle editor for Laravel Skipper Association editor for Laravel

Lower need of Laravel Eloquent skills

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

Skipper Laravel property editor - tracking policies, entity listener Skipper Laravel property editor - lifecycle callback Skipper editing Laravel fields

See all the features


Support for all Laravel Eloquent features

Supported formats

Migrations and base objects are continuously updated during every export. Derived model object is one-time exported and prepared for your customization.

Skipper Laravel migrations export Skipper Laravel base model object export Skipper Laravel derived model object export

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 Laravel entities and associations Editing Laravel fields, associations and inheritance in Skipper Skipper visual model of Laravel project

Associations

With smart wizards you can create all types of Laravel Eloquent associations (both classic and polymorphic). Use association tools and define owner and inverse entity or MN entity and aliases.

Skipper Laravel Many-to-Many wizard Skipper Laravel Association wizard Skipper Laravel Many-to-Many editor Skipper Laravel Association editor Skipper Laravel polymorphic associations

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 Laravel index editor

Eloquent Models

Model can be exported as single application to the "app" directory or can be split to several modules as standalone "packages".

Skipper Laravel property editor - custom export path

Database Migrations

Create, update or configure migrations with one click directly from the Skipper application.

Skipper Laravel property editor -  migrations management Skipper Laravel property editor -  migrations management

ORM Properties

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

Skipper Laravel property editor - attributes and options Skipper Laravel property editor - tracking policy Skipper Laravel property editor - lifecycle callback

Customization

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

Over 5,000 companies use Skipper every day


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

It simplifies our work because it saves us time. With features added over time like adding behaviors to Propel in Skipper it has become an unmissable tool in our organisation.

Erwin te Bos, aXtion

Skipper is especially helpful in the initial data modeling phase. Exporting the data model and scaffolding makes it really easy to get a first prototype up and running in a matter of minutes.

Jörn Wagner, Explicatis

Skipper is a stable and easy to use schema designing tool! No documentation, just design and everything is documented!

Siebe Vos, Inform'aid

It saved us a lot of time designing and configuring complex data models. It is impressive to see what this software achieves on its own.

Michael Stoye, ColorGATE

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

We use Skipper on our daily basis for ecommerce software development. It lets us visualize at a glance the data models and work on them in a simple and easy way.

Dario Schilman, IDS Soluciones Ecommerce

Simply put, for us, Skipper is not just a tool to master, but a mastermind that teaches us the best programming practices.

Can Berkol, Biber Ltd

More user stories

Detailed List of supported Laravel Eloquent ORM properties

Skipper model properties

Object Property
Project name, storage path, description
Module name, namespace, description, external plugin storage, export path and format
Entity name, namespace, description
Field name, type, size, required, unique, primary key, auto increment, default value, enum values, description
Association owner/inverse entity, reference fields, owner/inverse alias, association type (one-to-one, one-to-many), classic/polymorphic, parent requirement, description
Many to Many mn entity, owner/inverse entity, reference fields, owner/inverse alias,classic/polymorphic, description
Index name, unique, indexed fields, description

Laravel Eloquent model properties

Object Property
Project -
Module migrations enabled/disabled, migrations-path, migrations-generate-fk-names, models enabled/disabled
Entity Behaviors, charset, collation, connection, dateFormat, engine, extends, fillableAll, table, temporary, timestampCreatedAt, timestampUpdatedAt, model-disabled
Field always, castFormat, charset, collation, comment, decimal, generatedAs, isFillable, isGuarded, scale, storedAs, useCurrent, visualAs
Association onDelete, onUpdate
Many to Many pivotAttribute

Laravel Eloquent datatypes support

  • char
  • lineString
  • longText
  • mediumText
  • multiLineString
  • string
  • text
  • uuid
  • macAddress
  • ipAddress
  • json
  • jsonb
  • integer
  • bigInteger
  • smallInteger
  • tinyInteger
  • mediumInteger
  • decimal
  • double
  • float
  • date
  • dateTime
  • dateTimeTz
  • time
  • timeTz
  • timestamp
  • timestampTz
  • year
  • binary
  • boolean
  • enum
  • geometry
  • geometryCollection
  • multiPoint
  • multiPolygon
  • point
  • polygon

Laravel Eloquent model export formats

  • Migration definitions
  • Single / multi module (packages) export support
  • Model objects base classes
  • Model objects derived classes

Laravel Eloquent associations support

  • One to one (one-to-one)
  • One to many (one-to-many)
  • Many to one (many-to-one)
  • Many to many (many-to-many)