Унікальність у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 квітня, 2025
Вам потрібна надійна та гнучка система забезпечення унікальності даних у вашій програмі на Laravel? Досліджте пакет Laravel Unique, який дозволяє контролювати унікальність полів у моделях Eloquent з параметрами налаштування, що підходять для ваших специфічних потреб

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.