robotsinside / laravel-tags
用于为Laravel Eloquent模型添加标签的软件包。
1.2.1
2022-10-16 07:24 UTC
Requires
- php: ^7.3|^8.0
- illuminate/database: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0
- phpunit/phpunit: ^9.4
This package is auto-updated.
Last update: 2024-09-16 11:21:22 UTC
README
一个用于在Laravel中对Eloquent模型进行标签化的简单软件包。此软件包是Laravel Categories的兄弟软件包,可以用来对Eloquent模型进行分类。API与这个相同。
安装
- 使用Composer安装
composer require robotsinside/laravel-tags
- 在
config/app.php
中注册服务提供者
/* * Package Service Providers... */ \RobotsInside\Tags\TagsServiceProvider::class,
自动发现已启用,因此可以跳过此步骤。
- 发布迁移
php artisan vendor:publish --provider="RobotsInside\Tags\TagsServiceProvider" --tag="migrations"
- 迁移数据库。这将创建两个新表:
tags
和taggables
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
模型的范围,用于约束在给定时间框架内创建的记录。此范围支持人类可读的值,包括单数和复数格式的days
、months
和years
,例如
Taggable::taggedWithin('7 days');
Taggable::taggedWithin('1 month');
Taggable::taggedWithin('2 years');
安全性
如果您发现任何与安全性相关的问题,请通过电子邮件robertfrancken@gmail.com联系我们,而不是使用问题跟踪器。
鸣谢
咖啡时间
愿意为☕☕☕工作
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。