Extensions

Gedmo extensions

Installation

To include Gedmo extensions install them:

composer require "gedmo/doctrine-extensions=^3.0"

In Laravel Doctrine

Require the extensions package in composer:

composer require "laravel-doctrine/extensions:1.4.*"

Add the Gedmo (Behavioral) extensions service provider in config/app.php:

LaravelDoctrine\Extensions\GedmoExtensionsServiceProvider::class,

Standalone usage

To register all Gedmo extension for Fluent and register all abstract mapping files:

LaravelDoctrine\Fluent\Extensions\GedmoExtensions::registerAbstract($chain);

To register all Gedmo extension for Fluent and register all mapping files:

LaravelDoctrine\Fluent\Extensions\GedmoExtensions::registerAll($chain);

Blameable

$builder->manyToOne(User::class, 'createdBy')->blameable()->onCreate();
$builder->manyToOne(User::class, 'updatedBy')->blameable()->onUpdate();
$builder->manyToOne(User::class, 'changedBy')->blameable()->onChange(['title', 'body']);
$builder->manyToOne(User::class, 'changedBy')->blameable()->onChange('status', 'Published');

$builder->string('createdBy')->blameable()->onCreate();
$builder->string('updatedBy')->blameable()->onUpdate();
$builder->string('changedBy')->blameable()->onChange(['title', 'body']);
$builder->string('changedBy')->blameable()->onChange('status', 'Published');

IpTraceable

$builder->string('createdFromIp')->ipTraceable()->onCreate();
$builder->string('updateFromIp')->ipTraceable()->onUpdate();
$builder->string('changedFromIp')->ipTraceable()->onChange(['title', 'body']);
$builder->string('changedFromIp')->ipTraceable()->onChange('status', 'Published');

Loggable

$builder->loggable();
$builder->loggable(UserLog::class);

$builder->string('title')->versioned();
$builder->manyToOne(User::class)->versioned();
$builder->OneToMany(User::class)->versioned();

Sluggable

$builder->string('slug')->sluggable('title');
$builder->string('slug')->sluggable(['title', 'code']);

$builder->string('slug')->sluggable('title')
                        ->style('default')
                        ->dateFormat('Y-m-d H:i')
                        ->updatable(true)
                        ->unique(true)
                        ->uniqueBase('base')
                        ->separator('-')
                        ->prefix('prefix-')
                        ->suffix('-suffix');

SoftDeletes

$builder->softDelete();
$builder->softDelete('deletedAt')->timeAware();
$builder->dateTime('deletedAt')->nullable()->softDelete();

Sortable

$builder->integer('position')->sortablePosition();
$builder->string('group')->sortableGroup();
$builder->oneToMany(Category::class)->sortableGroup();
$builder->manyToMany(Category::class)->sortableGroup();

Timestamps

$builder->timestamps(); // Creates both createdAt and updatedAt
$builder->dateTime('createdAt')->timestampable()->onCreate();
$builder->dateTime('updatedAt')->timestampable()->onUpdate();
$builder->dateTime('changedAt')->timestampable()->onChange(['title', 'body']);
$builder->dateTime('changedAt')->timestampable()->onChange('status', 'Published');

Translatable

$builder->string('title')->translatable();
$builder->string('locale')->locale();
$builder->translationClass(PageTranslation::class);

Tree

$builder->nestedSet(); // Creates a default left, right, level and root
$builder->nestedSet()->left('lft')->right('rgt');

$builder->integer('left')->treeLeft();
$builder->integer('right')->treeRight();
$builder->integer('level')->treeLevel();
$builder->integer('root')->treeRoot();

Uploadable

$builder->uploadable();
$builder->uploadable()
        ->allowOverwrite()
        ->appendNumber()
        ->path('somePath')
        ->pathMethod('getPath')
        ->callback('afterFileUpload')
        ->alphanumericFilename()
        ->sha1Filename()
        ->customFilename(FileNameGenerator::class)
        ->maxSize(10000)
        ->allow(['png', 'jgp'])
        ->disallow(['exe']);

$builder->string('filePath')->asFilePath();        
$builder->string('fileName')->asFileName();     
$builder->string('fileSize')->asFileSize();     
$builder->string('mineType')->asFileMimeType();