spatie/laravel-tags

为您的Laravel应用添加标签和可标记行为

资助包维护!
spatie

安装数: 5,851,192

依赖者: 77

建议者: 0

安全性: 0

星标: 1,607

关注者: 17

分支: 281

开放问题: 5

4.6.1 2024-03-01 12:44 UTC

README

Latest Version on Packagist MIT Licensed GitHub Workflow Status Total Downloads

本包为您的模型提供可标记行为。安装包后,您只需将HasTags特性添加到Eloquent模型中,使其可标记。

但我们的功能不仅限于常规的标签功能。Laravel Tags内置了翻译标签、多种标签类型和排序功能。

您可以在https://spatie.be/docs/laravel-tags上找到文档。

以下是代码示例

// apply HasTags trait to a model
use Illuminate\Database\Eloquent\Model;
use Spatie\Tags\HasTags;

class NewsItem extends Model
{
    use HasTags;
    
    // ...
}
// create a model with some tags
$newsItem = NewsItem::create([
   'name' => 'The Article Title',
   'tags' => ['first tag', 'second tag'], //tags will be created if they don't exist
]);

// attaching tags
$newsItem->attachTag('third tag');
$newsItem->attachTag('third tag','some_type');
$newsItem->attachTags(['fourth tag', 'fifth tag']);
$newsItem->attachTags(['fourth_tag','fifth_tag'],'some_type');

// detaching tags
$newsItem->detachTag('third tag');
$newsItem->detachTag('third tag','some_type');
$newsItem->detachTags(['fourth tag', 'fifth tag']);
$newsItem->detachTags(['fourth tag', 'fifth tag'],'some_type');

// get all tags of a model
$newsItem->tags;

// syncing tags
$newsItem->syncTags(['first tag', 'second tag']); // all other tags on this model will be detached

// syncing tags with a type
$newsItem->syncTagsWithType(['category 1', 'category 2'], 'categories'); 
$newsItem->syncTagsWithType(['topic 1', 'topic 2'], 'topics'); 

// retrieving tags with a type
$newsItem->tagsWithType('categories'); 
$newsItem->tagsWithType('topics'); 

// retrieving models that have any of the given tags
NewsItem::withAnyTags(['first tag', 'second tag'])->get();

// retrieve models that have all of the given tags
NewsItem::withAllTags(['first tag', 'second tag'])->get();

// retrieve models that don't have any of the given tags
NewsItem::withoutTags(['first tag', 'second tag'])->get();

// translating a tag
$tag = Tag::findOrCreate('my tag');
$tag->setTranslation('name', 'fr', 'mon tag');
$tag->setTranslation('name', 'nl', 'mijn tag');
$tag->save();

// getting translations
$tag->translate('name'); //returns my name
$tag->translate('name', 'fr'); //returns mon tag (optional locale param)

// convenient translations through taggable models
$newsItem->tagsTranslated();// returns tags with slug_translated and name_translated properties
$newsItem->tagsTranslated('fr');// returns tags with slug_translated and name_translated properties set for specified locale

// using tag types
$tag = Tag::findOrCreate('tag 1', 'my type');

// tags have slugs
$tag = Tag::findOrCreate('yet another tag');
$tag->slug; //returns "yet-another-tag"

// tags are sortable
$tag = Tag::findOrCreate('my tag');
$tag->order_column; //returns 1
$tag2 = Tag::findOrCreate('another tag');
$tag2->order_column; //returns 2

// manipulating the order of tags
$tag->swapOrder($anotherTag);

Spatie是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述在这里

支持我们

我们在创建最佳开源包上投入了大量资源。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从您的家乡寄给我们明信片,说明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上

要求

本包需要Laravel 8或更高版本,PHP 8或更高版本,以及支持json字段和MySQL兼容函数的数据库。

安装

您可以通过Composer安装此包

composer require spatie/laravel-tags

包将自动注册自己。

您可以使用以下命令发布迁移

php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider" --tag="tags-migrations"

发布迁移后,您可以通过运行迁移来创建tagstaggables

php artisan migrate

您可以选择使用以下命令发布配置文件

php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider" --tag="tags-config"

这是发布配置文件的内容

return [

    /*
     * The given function generates a URL friendly "slug" from the tag name property before saving it.
     * Defaults to Str::slug (https://laravel.net.cn/docs/5.8/helpers#method-str-slug)
     */
    'slugger' => null, 
];

文档

您可以在https://spatie.be/docs/laravel-tags/v4上找到文档。

如果您在使用包时遇到困难,发现了错误,或者对laravel-tags包有一般性问题或改进建议,请随时在GitHub上创建问题,我们会尽快处理。

如果您发现了关于安全性的错误,请通过[email protected]发送邮件,而不是使用问题跟踪器。

测试

  1. phpunit.xml.dist复制到phpunit.xml,并填写您的数据库凭据。
  2. 运行composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全性

如果您发现了关于安全性的错误,请通过[email protected]发送邮件,而不是使用问题跟踪器。

明信片软件

您可自由使用此软件包,但如果它被用于您的生产环境,我们非常感谢您从您的家乡给我们寄一张明信片,并注明您正在使用我们哪个软件包。

我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。

我们将在公司网站上发布所有收到的明信片。查看我们的明信片

致谢

许可证

MIT许可证(MIT)。更多信息请参阅许可证文件