У багатьох веб-додатках створення унікальних номерів для моделей є поширеною вимогою. Це може бути корисно для електронних платформ, які потребують номерів замовлень, систем рахунків, що вимагають референсних номерів, або будь-якого іншого додатку, де необхідно відслідковувати ідентифікатори. Управління генерацією референсних номерів може швидко стати складним процесом.
Referenceable — це пакет Laravel, створений Мохамедом Саїдом, який допомагає вирішити цю задачу, забезпечуючи можливість генерувати налаштовані референсні номери моделей з гнучкими форматами та широкими можливостями налаштування.
{YEAR}, {MONTH}, {SEQ}, {RANDOM} для складних форматів.Припустимо, у нас є система, що дозволяє користувачам подавати запити на статусні листи в університеті. Ми можемо створити міграцію, що міститиме стовпець для зберігання нашого референсного номера:
Schema::create('status_letters', function (Blueprint $table) {
$table->id();
$table->string('reference_number')->unique()->index();
// інші стовпці для наших статусних листів...
$table->timestamps();
});
Далі створимо модель та вкажемо, як ми хочемо генерувати наші референсні номери:
use MohamedSaid\Referenceable\Traits\HasReference;
class StatusLetter extends Model
{
use HasReference;
protected $referenceColumn = 'reference_number';
protected $referenceStrategy = 'template';
protected $referenceTemplate = [
'format' => '{PREFIX}-{YEAR}{MONTH}{SEQ}',
'sequence_length' => 4,
];
protected $referencePrefix = 'STL';
// Генерує: STL-2025090001, STL-2025090002...
}
Замість стратегії template можна також використовувати стратегію random:
protected $referenceStrategy = 'random';
protected $referencePrefix = 'STL';
protected $referenceLength = 6;
protected $referenceCase = 'upper';
// Генерує: STL-A12BC3
Або використати стратегію sequential:
protected $referenceStrategy = 'sequential';
protected $referencePrefix = 'STL';
protected $referenceSequential = [
'start' => 1000,
'min_digits' => 4,
'reset_frequency' => 'monthly', // ніколи, щоденно, щомісяця, щорічно
];
// Генерує: STL-001000, STL-001001, STL-001002...
Налаштування референсів також можна виконувати глобально у config/referenceable.php, без прив'язки до кожної моделі.
Referenceable пропонує численні методи та області видимості моделей. Ось кілька з них:
// Ручна генерація без збереження
$reference = $statusLetter->generateReference();
// Перевірка наявності референсу в моделі
if ($statusLetter->hasReference()) {
echo "Номер референсу: " . $statusLetter->reference;
}
// Знайти елемент за його референсним номером
$statusLetter = StatusLetter::findByReference('STL-2025090001');
// Знайти референси, що починаються з префікса
$lettersThisMonth = StatusLetter::referenceStartsWith('STL-202509')->get();
Забудьте про плутанину з генерацією референсних номерів у Laravel — пакет Referenceable надає професійні номери замовлень, ідентифікатори рахунків та коди відстеження всього за кілька рядків налаштувань.
Спробуйте цей пакет, встановивши його через Composer та виконавши команду установки:
composer require eg-mohamed/referenceable
php artisan referenceable:install
Дізнайтеся більше про цей пакет і перегляньте вихідний код на GitHub.
Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю
Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!