teguh02 / filament-db-sync
This package allow sync two different laravel filament app db
Fund package maintenance!
teguh02
Requires
- php: ^8.1
- filament/filament: ^3.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.1
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
Installation
You can install the package via composer:
composer require teguh02/filament-db-sync
Panel Configuration
Install the library in your panel service provider
<?php use Teguh02\FilamentDbSync\FilamentDbSync; public function panel(Panel $panel): Panel { return $panel // ... another filament configuration ->plugins([ FilamentDbSync::make(), ]); }
Configuration File and Migrations
Publish the configuration and migrations
php artisan vendor:publish --provider="Teguh02\FilamentDbSync\FilamentDbSyncServiceProvider"
php artisan migrate
Usage
Model configuration
In your model class, add the fillable
and the casts
attribute. For example if we have a model with name is Items, the model configuration should will be below
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Items extends Model { use HasFactory; // Define the fillable property to // allow mass assignment on the model // and the database sync process protected $fillable = [ 'name', 'description', 'price', 'stock', 'expired_at', ]; // Define the casts property to // automatically cast the data type // of the model attributes protected $casts = [ 'stock' => 'integer', 'price' => 'integer', 'expired_at' => 'date', ]; }
db_sync.php config
For the plugins config, you can adjust manually as you needs.
<?php // config for Teguh02/FilamentDbSync return [ /** * The host where the data will be synced */ 'sync_host' => env('SYNC_HOST', 'http://localhost'), /** * The token to be used for authentication */ 'auth_token' => env('SYNC_TOKEN', 'default_token'), /** * Models configuration */ 'models' => [ /** * If set to true, the package will * automatically scan all models in the app/Models directory */ 'auto_scan' => env('AUTO_SCAN_MODELS', true), /** * If auto_scan is set to true, * this configuration will be used to exclude models * which will not be synced */ 'excluded' => [ // App\Models\User::class, ], /** * When auto_scan is set to false, * this configuration will be used to include models */ 'included' => [ // App\Models\User::class, ], /** * The column to be used as the key * when syncing data */ 'column_as_key' => [ // class => column App\Models\User::class => 'email', // or you can use the table name // table_name => column // 'users' => 'email', ], ], /** * Sync configuration */ 'sync' => [ /** * The action to be taken when there is duplicate data * * Available options: * - update : update the existing data * - duplicate : create a new data with the same data */ 'duplicate_data_action' => env('DUPLICATE_DATA_ACTION', 'update'), ], ];
Sync Env Configuration
Please set your env configuration following below, for example we have 2 different server below. Server 1 app domain is server1.com and then server 2 domain is server2.com
On the Server 1 :
SYNC_TOKEN=FUswndOCKEm5rAKzgqFDsXZ5euWhA535tOzgE00n9tuP4IsofFslPM5VgtrT SYNC_HOST=http://server2.com
On the Server 2 :
SYNC_TOKEN=FUswndOCKEm5rAKzgqFDsXZ5euWhA535tOzgE00n9tuP4IsofFslPM5VgtrT SYNC_HOST=http://server1.com
Queue configuration
Because this plugin use a jobs function to execute huge data, please set your queue driver according your needs
#QUEUE_CONNECTION=sync
QUEUE_CONNECTION=database
Screenshoot
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.