PHP code example of mawuva / laravel-serial-sequence
1. Go to this page and download the library: Download mawuva/laravel-serial-sequence 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/ */
mawuva / laravel-serial-sequence example snippets
Schema::table('orders', function (Blueprint $table) {
$table->string('serie', 10);
$table->smallInteger('serial_year');
$table->smallInteger('serial_month');
$table->unsignedInteger('serial_number');
$table->string('serial')->unique();
// Index for business search
$table->index(['serie', 'serial_year', 'serial_month'], 'idx_orders_serial_period');
// Index for audit / precise search
$table->index(['serie', 'serial_number'], 'idx_orders_serie_number');
});
use Mawuva\LaravelSerialSequence\Concerns\HasSerialColumns;
Schema::table('orders', function (Blueprint $table) {
HasSerialColumns::addSerialColumns($table, 'orders');
});
use Illuminate\Database\Eloquent\Model;
use Mawuva\LaravelSerialSequence\Concerns\HasSerialSequence;
use Mawuva\LaravelSerialSequence\Contracts\HasSerial;
class Order extends Model implements HasSerial
{
use HasSerialSequence;
protected $fillable = [
'customer_id',
'amount',
// serial fields are managed automatically
'serie',
'serial_year',
'serial_month',
'serial_number',
'serial',
];
protected $casts = [
'total' => 'decimal:2',
'serial_year' => 'integer',
'serial_month' => 'integer',
'serial_number' => 'integer',
];
/**
* Get the business serie identifier for orders.
*/
public function serialSerie(): string
{
return 'ORD';
}
}
// Invoice model
class Invoice extends Model implements HasSerial
{
use HasSerialSequence;
public function serialSerie(): string
{
return 'INV';
}
}
// Booking model
class Booking extends Model implements HasSerial
{
use HasSerialSequence;
public function serialSerie(): string
{
return 'BKG';
}
}
// Ticket model
class Ticket extends Model implements HasSerial
{
use HasSerialSequence;
public function serialSerie(): string
{
return 'TICKET';
}
}
// Automatic serial generation
$order = Order::create([
'customer_id' => 1,
'amount' => 99.99,
]);
// The serial fields are automatically populated:
// - serie: 'ORD' (default or configured)
// - serial_year: 2024
// - serial_month: 2
// - serial_number: 1 (incremented)
// - serial: 'ORD-2024-02-0001'
// Get orders for a specific period
$orders = Order::serialPeriod('ORD', 2024, 2)->get();
// Get orders with specific serial number in a series
$orders = Order::serialNumber('ORD', 5)->get();
// Filter by series only
$orders = Order::bySerie('ORD')->get();
// Filter by year
$orders = Order::byYear(2024)->get();
// Filter by month
$orders = Order::byMonth(2)->get();
// Range queries on serial numbers
$orders = Order::serialNumberFrom(10)->get(); // >= 10
$orders = Order::serialNumberTo(100)->get(); // <= 100
// Complex queries combining scopes
$recentOrders = Order::bySerie('INV')
->byYear(2024)
->serialNumberFrom(50)
->orderBy('serial_number', 'desc')
->limit(10)
->get();
// Get the latest serial for a period
$latestOrder = Order::serialPeriod('ORD', 2024, 2)
->orderBy('serial_number', 'desc')
->first();
return [
/*
|--------------------------------------------------------------------------
| Separator between serial parts
|--------------------------------------------------------------------------
| Example: INV-2302-000123
*/
'separator' => '-',
/*
|--------------------------------------------------------------------------
| Separator between prefix and serial
|--------------------------------------------------------------------------
| Example: PREFIX/INV-2302-000123
*/
'prefix_separator' => '/',
/*
|--------------------------------------------------------------------------
| Number length
|--------------------------------------------------------------------------
| The serial number will be left-padded with zeros to reach this length
*/
'number_length' => 6,
/*
|--------------------------------------------------------------------------
| Month length
|--------------------------------------------------------------------------
| How many digits for the month in the serial
*/
'month_length' => 2,
/*
|--------------------------------------------------------------------------
| Year length
|--------------------------------------------------------------------------
| How many digits from the year to use
*/
'year_length' => 2,
/*
|--------------------------------------------------------------------------
| Optional prefix resolver
|--------------------------------------------------------------------------
| You can provide a callable that receives the model and returns a prefix string
*/
'prefix_resolver' => null,
];