Laravel Unique — це пакет, створений Віллом Вінсентом, який надає трейт для моделей Eloquent у Laravel, щоб гарантувати, що певне поле залишається унікальним за визначеними умовами. Він пропонує гнучкі формати суфіксів і можливість використання кастомних генераторів значень, що ідеально підходять для таких випадків, як унікальні назви, слуги чи ідентификатори.
use WillVincent\LaravelUnique\HasUniqueNames;
class Team extends Model
{
use HasUniqueNames;
// Необов'язково: перевизначення налаштувань за замовчуванням
protected $uniqueField = 'team_name'; // Поле, яке потрібно зберігати унікальним (за замовчуванням: 'name')
protected $constraintFields = ['team_id']; // Область унікальності (за замовчуванням: [])
protected $uniqueSuffixFormat = '-{n}'; // Формат суфікса (за замовчуванням: ' ({n})')
}
Якщо наше team_name
дорівнює "LNFC" і team_id
дорівнює 1, тоді вихідні дані будуть такими:
Output: "LNFC" (якщо унікально)
Output: "LNFC-1" (якщо "LNFC" вже існує)
Output: "LNFC-2" (якщо "LNFC" та "LNFC-1" вже існують)
Ви також можете створити кастомний генератор, додавши метод до своєї моделі:
protected $uniqueValueGenerator = 'generateUniqueTeamName';
public function generateUniqueTeamName(string $base, array $constraints, ?int $attempt): string
{
return $base . '-' . \Str::random(5);
}
Output: "LNFC-L2avJ" (випадковий суфікс з 5 символів)
Встановіть пакет через Composer:
composer require willvincent/laravel-unique
Якщо потрібно налаштувати значення за замовчуванням, ви можете опублікувати конфігураційний файл (необов'язково):
php artisan vendor:publish --tag="laravel-unique-config"
Примітка: Цей пакет гарантує унікальність на рівні програми. Для забезпечення цілісності даних, особливо в умовах високої конкуренції, рекомендується додати унікальні обмеження на рівні бази даних (наприклад, унікальні індекси) разом із цим трейт.
Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub.