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();
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.