laravel-tags 는 spatie 에서 만든 라이브러리로 Laravel 의 Eloquent model 에 tagging 할 수 있게 해줍니다.


tag 를 연결할 Model 에 Has


Taggable Has Many 관계를 

설치

컴포저로 패키지를 설치합니다.

composer require spatie/laravel-tags
BASH

만약 laravel nova 를 사용한다면 아래 패키지도 설치해 줍니다.

composer require spatie/nova-tags-field
BASH


migration 파일과 설정을 퍼블리싱합니다.

php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider" --tag="tags-migrations"
BASH
php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider" --tag="tags-config"
CODE


이제 마이그레이션을 실행해 줍니다.

php artisan migrate
CODE


설정

slug 설정

config/tags.php 에 tags library 동작 설정을 할 수 있는데 설정이 없으면 기본적으로 slug 생성시 laravel 의 slug 헬퍼를 사용합니다.

return [

    'slugger' => null,
PHP


하지만 저 헬퍼는 영어 알파벳과 숫자만 남기고 다 날려 버리므로 제대로 slug 설정이 안 되는 문제가 있으므로 별도의 custom slug 함수를 만들어서 등록해 줘야 합니다. (PHP 에서 국제화(i18n) 라이브러리로 문장을 음차(Transliteration)하기 - slug 생성시 유용 참고)

return [

    'slugger' => 'transliterate_slug',
PHP


model 설정

Tag 기능을 사용하려는 eloquent model 에 \Spatie\Tags\HasTags trait 를 추가해 줍니다.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Tags\HasTags;

class Post extends Model
{
    use HasFactory;
    use HasTags;
}
PHP

기본 사용

tag 연결

$post = Post::find(1);

// 단일 태그
$post->attachTag('내 tag 1');

// 멀티 태그
$post->attachTag(['내 tag 2', '내 tag 3']);
PHP


연결된 태그는 tags 테이블에 저장됩니다.

연결 해제

$post = Post::find(1);

// 단일 태그 해제
$post->detachTag('내 tag 1');

// 멀티 태그 해제
$post->detachTag(['내 tag 2', '내 tag 3']);
PHP


같이 보기


Ref