robotsinside/laravel-tags

用于为Laravel Eloquent模型添加标签的软件包。

1.2.1 2022-10-16 07:24 UTC

This package is auto-updated.

Last update: 2024-09-16 11:21:22 UTC


README

Latest Version on Packagist Total Downloads CI License: MIT

一个用于在Laravel中对Eloquent模型进行标签化的简单软件包。此软件包是Laravel Categories的兄弟软件包,可以用来对Eloquent模型进行分类。API与这个相同。

安装

  1. 使用Composer安装
composer require robotsinside/laravel-tags
  1. config/app.php中注册服务提供者
/*
* Package Service Providers...
*/
\RobotsInside\Tags\TagsServiceProvider::class,

自动发现已启用,因此可以跳过此步骤。

  1. 发布迁移
php artisan vendor:publish --provider="RobotsInside\Tags\TagsServiceProvider" --tag="migrations"
  1. 迁移数据库。这将创建两个新表:tagstaggables
php artisan migrate

使用方法

在模型中使用RobotsInside\Tags\Taggable特性。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use RobotsInside\Tags\Taggable;

class Post extends Model
{
    use Taggable;
}

您现在可以开始进行标签化。可以通过传递整数、整数数组、模型实例或模型集合来对模型进行标签化。

<?php

use App\Post;
use Illuminate\Support\Facades\Route;
use RobotsInside\Tags\Models\Tag;

Route::get('/', function () {

    // Retrieve a new or existing tag
    $tag1 = (new Tag())->resolve('Tag 1');
    $tag2 = (new Tag())->resolve('Tag 2');

    // Or, retrieve a collection of new or existing tags
    $tags = (new Tag())->resolveAll(['Tag 1', 'Tag 2', 'Tag 3'])

    $post = new Post();
    $post->title = 'My blog';
    $post->save();

    $post->tag($tag1);
    // Or
    $post->tag(['tag-1']);
    // Or
    $post->tag([1, 2]);
    // Or
    $post->tag(Tag::get());
});

取消标签化模型同样简单。

<?php

use App\Post;
use Illuminate\Support\Facades\Route;
use RobotsInside\Tags\Models\Tag;

Route::get('/', function () {

    $tag1 = Tag::find(1);

    $post = Post::where('title', 'My blog')->first();

    $post->untag($tag1);
    // Or
    $post->untag(['tag-1']);
    // Or
    $post->untag([1, 2]);
    // Or
    $post->untag(Tag::get());
    // Or
    $post->untag(); // remove all tags
});

范围

每次使用RobotsInside\Tags\Models\Tag时,tags表中的count列都会递增。当移除标签时,计数会递减,直到为零。

此软件包附带一些预定义的范围,以便更容易地对count列进行查询,包括>=><=<约束,例如

  • Tag::usedGte(1);
  • Tag::usedGt(2);
  • Tag::usedLte(3);
  • Tag::usedLt(4);

此外,还提供了一个对Taggable模型的范围,用于约束在给定时间框架内创建的记录。此范围支持人类可读的值,包括单数和复数格式的daysmonthsyears,例如

  • Taggable::taggedWithin('7 days');
  • Taggable::taggedWithin('1 month');
  • Taggable::taggedWithin('2 years');

安全性

如果您发现任何与安全性相关的问题,请通过电子邮件robertfrancken@gmail.com联系我们,而不是使用问题跟踪器。

鸣谢

咖啡时间

愿意为☕☕☕工作

Buy Me A Coffee

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件