Yii 2.0: yii2-taggable

A modern taggable behavior for the Yii framework.
6 followers

Author Source Code Build Status Code Coverage Code Quality

A modern taggable behavior for the Yii framework.

Installation

The preferred way to install this extension is through composer.

Either run

$ php composer.phar require creocoder/yii2-taggable:dev-master

or add

"creocoder/yii2-taggable": "dev-master"

to the require section of your composer.json file.

Configuring

Configure model as follows

use creocoder\taggable\TaggableBehavior;
 
/**
 * ...
 * @property string $tagNames
 */
class Post extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            TaggableBehavior::className(),
        ];
    }
 
    public function rules()
    {
        return [
            //...
            ['tagNames', 'safe'],
        ];
    }
 
    public function transactions()
    {
        return [
            self::SCENARIO_DEFAULT => self::OP_ALL,
        ];
    }
 
    public static function find()
    {
        return new PostQuery(get_called_class());
    }
 
    public function getTags()
    {
        return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
            ->viaTable('post_tag_assn', ['post_id' => 'id']);
    }
}

Configure query class as follows

use creocoder\taggable\TaggableQueryBehavior;
 
class PostQuery extends \yii\db\ActiveQuery
{
    public function behaviors()
    {
        return [
            TaggableQueryBehavior::className(),
        ];
    }
}

Usage

Setting tags to the entity

To set tags to the entity

$post = new Post();
 
// through string
$post->tagNames = 'foo, bar, baz';
 
// through array
$post->tagNames = ['foo', 'bar', 'baz'];

Adding tags to the entity

To add tags to the entity

$post = Post::findOne(1);
 
// through string
$post->addTagNames('bar, baz');
 
// through array
$post->addTagNames(['bar', 'baz']);

Remove tags from the entity

To remove tags from the entity

$post = Post::findOne(1);
 
// through string
$post->removeTagNames('bar, baz');
 
// through array
$post->removeTagNames(['bar', 'baz']);

Getting tags from the entity

To get tags from the entity

$posts = Post::find()->with('tags')->all();
foreach ($posts as $post) {
    echo $post->tagNames;
}

Search entities by any tags

To search entities by any tags

// through string
$posts = Post::find()->anyTagNames('foo, bar')->all();
 
// through array
$posts = Post::find()->anyTagNames(['foo', 'bar'])->all();

Search entities by all tags

To search entities by all tags

// through string
$posts = Post::find()->allTagNames('foo, bar')->all();
 
// through array
$posts = Post::find()->allTagNames(['foo', 'bar'])->all();

Be the first person to leave a comment

Please to leave your comment.

Create extension
Downloads
No downloadable files yet