PHP code example of jpnut / eloquent-versioning

1. Go to this page and download the library: Download jpnut/eloquent-versioning library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

jpnut / eloquent-versioning example snippets


    ...
   
    /**
     * @return \JPNut\Versioning\VersionOptions
     */
    public function getVersionableOptions(): VersionOptions
    {
        return VersionOptions::create()
            ->setVersionableAttributes(['email', 'city']);
    }
   
    ...
    

    ...
   
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('version')->unsigned()->nullable();
        $table->string('name');
        $table->timestamps();
        $table->softDeletes();
    });
   
    ...
    

    ...

    Schema::create('user_versions', function (Blueprint $table) {
        $table->integer('parent_id')->unsigned();
        $table->integer('version')->unsigned();
        $table->string('email');
        $table->string('city');
        $table->timestamp('created_at');

        $table->primary(['parent_id', 'version']);
    });

    ...
    

...
   
/**
 * @return \JPNut\Versioning\VersionOptions
 */
public function getVersionableOptions(): VersionOptions
{
    return VersionOptions::create()
        ->saveVersionKeyTo('version')
        ->useVersionTable('user_versions')
        ->saveVersionTableKeyTo('version')
        ->versionTableForeignKeyName('parent_id')
        ->versionTableCreatedAtName('created_at');
}

...

use Illuminate\Database\Eloquent\Model;
use JPNut\Versioning\Versionable;
use JPNut\Versioning\VersionableTrait;
use JPNut\Versioning\VersionOptions;

class YourEloquentModel extends Model implements Versionable
{
    use VersionableTrait;
    
    /**
     * @return VersionOptions
     */
    public function getVersionableOptions(): VersionOptions
    {
        return VersionOptions::create()
            ->setVersionableAttributes(['email', 'city']);
    }

    ...
}

Model::atVersion(1)->find(1);

Model::atTime(now()->subDay())->find(1);

Model::withoutVersion()->find(1);

$model->versions;

$model->changeVersion(1);