zaichaopan / taggable
一个使eloquent模型可标记的包
v0.1-beta
2018-06-23 19:36 UTC
Requires
- php: >=7.1
- illuminate/support: ~5.5.0|~5.6.0
Requires (Dev)
- orchestra/testbench: ^3.5.0
- phpunit/phpunit: ^7.2
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表
安装包后,运行迁移命令以添加tags和taggables表
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(); });
此包还提供了Tag和Taggable模型。
// 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();