qmagix / laravel-tagging by qmagix
forked from rtconner/laravel-tagging

Use PHP traits to extend Laravel Eloquent Models to allow Tags. Models can be marked as Taggable. Derived from rtconner's work for compatibility with MySql 5.6
Package Data
Maintainer Username: qmagix
Maintainer Contact: q@computermagix.org (Qmagix)
Package Create Date: 2017-04-23
Package Last Update: 2017-04-23
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-04-19 15:02:36
Package Statistics
Total Downloads: 19
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 0
Total Watchers: 1
Total Forks: 0
Total Open Issues: 0

Laravel Taggable Trait

This package is a fork from rtconner's same name package to support db string length issue that is not compatible with MySQL 5.6.

This package is not meant to handle javascript or html in any way. This package handles database storage and read/writes only.

There are no real limits on what characters can be used in a tag. It uses a slug transform to determine if two tags are identical ("sugar-free" and "Sugar Free" would be treated as the same tag). Tag display names are run through Str::title()

Laravel/Lumen 5 Documentation
Laravel 4 Documentation

Composer Install (for Laravel 5.3/Lumen 5)

composer require qmagix/laravel-tagging

Install and then Run the migrations

The service provider does not load on every page load, so it should not slow down your app.

'providers' => array(
php artisan vendor:publish --provider="Qmagix\Tagging\Providers\TaggingServiceProvider"
php artisan migrate
Lumen 5 Installation

Lumen does not have a vendor:publish command, so you will need to create or copy the provided migrations and config file into their respective directory.

In app\bootstrap\app.php

// Add this line in your config section
// Add this line in your service provider section

After these two steps are done, you can edit config/tagging.php with your prefered settings.

Setup your models

class Article extends \Illuminate\Database\Eloquent\Model {
	use \Qmagix\Tagging\Taggable;

Quick Sample Usage

$article = Article::with('tagged')->first(); // eager load

foreach($article->tags as $tag) {
	echo $tag->name . ' with url slug of ' . $tag->slug;

$article->tag('Gardening'); // attach the tag

$article->untag('Cooking'); // remove Cooking tag
$article->untag(); // remove all tags

$article->retag(array('Fruit', 'Fish')); // delete current tags and save new tags

$article->tagNames(); // get array of related tag names

Article::withAnyTag(['Gardening','Cooking'])->get(); // fetch articles with any tag listed

Article::withAllTags(['Gardening', 'Cooking'])->get(); // only fetch articles with all the tags

Qmagix\Tagging\Model\Tag::where('count', '>', 2)->get(); // return all tags used more than twice

Article::existingTags(); // return collection of all existing tags on any articles

More examples in the documentation

Tag Groups

You can create groups with the following artisan command

php artisan tagging:create-group MyTagGroup

Set the tag group for a tag


To get all the tags in a certain group


Check if a tag is in a group



See config/tagging.php for configuration options.

Further Documentation

See the docs/ folder for more documentation.

Upgrading Laravel 4 to 5

This library stores full model class names into the database. When you upgrade laravel and you add namespaces to your models, you will need to update the records stored in the database. Alternatively you can override Model::$morphClass on your model class to match the string stored in the database.


  • Robert Conner - http://smartersoftware.net

Further Reading