zaichaopan / taggable
A package to make eloquent model taggable
Requires
- php: >=7.1
- illuminate/support: ~5.5.0|~5.6.0
Requires (Dev)
- orchestra/testbench: ^3.5.0
- phpunit/phpunit: ^7.2
This package is not auto-updated.
Last update: 2025-01-28 05:39:52 UTC
README
This Package is used to make eloquent model taggable. It can be used in laravel 5.5 or higher.
Installation
composer require zaichaopan/taggable
Usage
- Add tags and taggables table
After you install the package, run migration command to add tags and taggables table
php artisan migrate
The schemas of these two tables
// tags table Schema::create('tags', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('slug')->unique(); $table->timestamps(); });
// taggables table Schema::create('taggables', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('tag_id'); $table->foreign('tag_id')->references('id')->on('tags'); $table->morphs('taggable'); $table->timestamps(); });
This packages also provides Tag and Taggable models.
// To add a create tag use Zaichaopan\Taggable\Models\Tag; Tag::create(['name' => 'laravel']); // To get all the tag names $names = Tag::getNames();
Note:
Please make sure tag name is unique. After you create or update a tag, its slug value will be automatically added or updated based on its name value.
- Add hasTags trait to the model you want to tag.
Let's say you have Activity model and you can give it tag.
// use Zaichaopan\Taggable\Traits\HasTags; class Activity extends Model { use HasTags; }
The hasTags trait provides the following methods to the model which uses it
tags:
It is used to get all the tags of the model:
$tags = $activity->tags;
tag:
/** * * @param string|array ...$tagNames */ public function tag(...$tagNames): void
$activity->tag('outdoor'); // or $activity->tag('outdoor', 'sports'); // or $activity->tag(['outdoor', 'sports']);
Note:
The tag name provided must be valid (exists in the tags table). If a tag name is invalid, it will be ignored. If a tag has already been given to a model, it will not be given again.
reTag:
/** * * @param string|array ...$tagNames */ public function reTag(...$tagNames): void
It is used to update a model's tag. After calling this method on a model, all its old tags will be moved and only the new tag will remain. If the tag name provided is invalid, it will be ignored. If all the provided tag names are invalid, the model will not be retagged. It will still keep its old tags.
$activity->tag('outdoor'); // the tag of the activity will be sports $activity->reTag('sports'); // or $activity->reTag(['outdoor', 'sports']);
unTag:
/** * * @param string|array ...$tagNames */ public function unTag(...$tagNames): void
It is used to remove a tag or multiple tags from a model. If a given tag name is invalid, it will be ignore. If all the given tag names are invalid, none of the model's tags will be removed.
$activity->unTag('outdoor'); // or $activity->unTag('outdoor', 'sports'); // or $activity->unTag(['outdoor', 'sports']);
unTagAll:
public function unTagAll(): void
It is used to removed all the tags of the model.
$activity->unTagAll();