Use PHP traits to extend Laravel Eloquent Models to allow Tags. Models can be marked as Taggable.

Installs: 19 701

Dependents: 3

Stars: 164

Watchers: 13

Forks: 45

Open Issues: 1

Language: PHP

1.1.3 2015-08-09 00:53 UTC


Latest Stable Version Total Downloads License Build Status

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 5 Documentation
Laravel 4 Documentation

Composer Install (for Laravel 5)
composer require rtconner/laravel-tagging "~1.1"
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="Conner\Tagging\TaggingServiceProvider"
php artisan migrate

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 \Conner\Tagging\TaggableTrait;
Quick Sample Usage
$article = Article::with('tagged')->first(); // eager load

foreach($article->tagged as $tagged) {
    echo $tagged->tag_name . ' with url slug of ' . $tagged->tag_slug;

foreach($article->tags as $tag) { // this is a little slower than above (requires extra queries)
    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

$tagged = $article->tagged; // return Collection of rows tagged to article
$tags = $article->tags; // return Collection the actual tags (is slower than using tagged)

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

Article::withAnyTag('Gardening, Cooking')->get() // fetch articles with any tag listed
Article::withAnyTag(array('Gardening','Cooking'))->get() // different sytax same result as above

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

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

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


See config/tagging.php for configuration options.

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.

Credits Further Reading