zaichaopan/taggable

一个使eloquent模型可标记的包

v0.1-beta 2018-06-23 19:36 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:10:00 UTC


README

此包用于使eloquent模型可标记。它可以在laravel 5.5或更高版本中使用。

安装

composer require zaichaopan/taggable

用法

  • 添加标签和taggables表

安装包后,运行迁移命令以添加tagstaggables

php artisan migrate

这两个表的架构

// 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();
});

此包还提供了TagTaggable模型。

// To add a create tag
use  Zaichaopan\Taggable\Models\Tag;

Tag::create(['name' => 'laravel']);

// To get all the tag names
$names = Tag::getNames();

注意:

请确保标签名称唯一。创建或更新标签后,其slug值将根据其名称值自动添加或更新。

  • hasTags特性添加到您想标记的模型中。

假设您有一个Activity模型,您可以给它添加标签。

//
use Zaichaopan\Taggable\Traits\HasTags;

class Activity extends Model
{
    use HasTags;
}

hasTags特性为使用它的模型提供了以下方法

tags:

用于获取模型的所有标签

$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']);

注意:

提供的标签名称必须是有效的(存在于标签表中)。如果标签名称无效,则会被忽略。如果标签已分配给模型,则不会再次分配。

reTag:

/**
 *
 * @param string|array ...$tagNames
 */
public function reTag(...$tagNames): void

用于更新模型的标签。在模型上调用此方法后,所有旧标签将被移动,并且只保留新标签。如果提供的标签名称无效,则会被忽略。如果提供的所有标签名称都无效,则模型不会重新标记。它仍将保留其旧标签。

$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

用于从模型中移除标签或多个标签。如果提供的标签名称无效,则会被忽略。如果提供的所有标签名称都无效,则不会移除模型中的任何标签。

$activity->unTag('outdoor');

// or
$activity->unTag('outdoor', 'sports');

// or
$activity->unTag(['outdoor', 'sports']);

unTagAll:

public function unTagAll(): void

用于移除模型的所有标签。

$activity->unTagAll();