PHPackages                             zaichaopan/taggable - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. zaichaopan/taggable

ActiveLibrary[Database &amp; ORM](/categories/database)

zaichaopan/taggable
===================

A package to make eloquent model taggable

v0.1-beta(8y ago)11MITPHPPHP &gt;=7.1

Since Jun 23Pushed 8y ago1 watchersCompare

[ Source](https://github.com/zaichaopan/taggable)[ Packagist](https://packagist.org/packages/zaichaopan/taggable)[ RSS](/packages/zaichaopan-taggable/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

Taggable
========

[](#taggable)

This Package is used to make eloquent model taggable. It can be used in laravel 5.5 or higher.

Installation
------------

[](#installation)

```
composer require zaichaopan/taggable
```

Usage
-----

[](#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();
```

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2928d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/16104572?v=4)[zaichaopan](/maintainers/zaichaopan)[@zaichaopan](https://github.com/zaichaopan)

---

Top Contributors

[![zaichaopan](https://avatars.githubusercontent.com/u/16104572?v=4)](https://github.com/zaichaopan "zaichaopan (8 commits)")

---

Tags

laravelphptaglaraveltag

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/zaichaopan-taggable/health.svg)

```
[![Health](https://phpackages.com/badges/zaichaopan-taggable/health.svg)](https://phpackages.com/packages/zaichaopan-taggable)
```

###  Alternatives

[illuminate/database

The Illuminate Database package.

2.8k54.1M11.2k](/packages/illuminate-database)[kirschbaum-development/eloquent-power-joins

The Laravel magic applied to joins.

1.6k29.9M42](/packages/kirschbaum-development-eloquent-power-joins)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8723.1M23](/packages/yajra-laravel-oci8)[cviebrock/eloquent-taggable

Easy ability to tag your Eloquent models in Laravel.

567714.4k4](/packages/cviebrock-eloquent-taggable)[glushkovds/phpclickhouse-laravel

Adapter of the most popular library https://github.com/smi2/phpClickHouse to Laravel

2051.4M2](/packages/glushkovds-phpclickhouse-laravel)[lemaur/eloquent-publishing

207.8k1](/packages/lemaur-eloquent-publishing)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
