vendocrat/ laravel-taxonomies
Requires
- php: ^7.4|^8.0
- cviebrock/eloquent-sluggable: ^6.0|^7.0|^8.0
- illuminate/database: ^6.0|^7.0|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
- webpatser/laravel-uuid: ^3.0|^4.0
Requires (Dev)
- doctrine/dbal: ^2.12
- laravel/framework: ^6.0|^7.0|^8.0
- mockery/mockery: ~1.0
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.0|^9.0
This package is not auto-updated.
Last update: 2022-02-01 12:50:43 UTC
README
Laravel Taxonomies
Laravel的简单、可嵌套的术语和分类(类似于WordPress)。
安装
从你的composer.json
文件中安装此包
"require": { "lecturize/laravel-taxonomies": "^1.0" }
并运行$ composer update
或同时运行$ composer require lecturize/laravel-taxonomies
。
配置和迁移
$ php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider" $ php artisan vendor:publish --provider="Lecturize\Taxonomies\TaxonomiesServiceProvider"
这将发布一个config/sluggable.php
,一个config/lecturize.php
和一些迁移文件,您需要运行这些文件
$ php artisan migrate
为了确保迁移文件正确发布,请确保您已将目录database/migrations
添加到项目中composer.json
的类映射中。
用法
首先,将我们的HasCategories
特质添加到您的模型中。
<?php namespace App\Models; use Lecturize\Taxonomies\Contracts\CanHaveCategories; use Lecturize\Taxonomies\Traits\HasCategories; class Post extends Model implements CanHaveCategories { use HasCategories; // ... } ?>
添加术语
$model->addCategory('My Category', 'blog_category')
添加多个术语
$model->addCategories(['Add','Multiple','Categories'], 'blog_category')
添加具有可选的parent_id(分类->id)和排序顺序的术语
$model->addCategory('My Category', 'blog_category', 1, 2)
通过分类获取模型的所有术语
$model->getCategories('taxonomy')
通过(可选)分类获取模型的具体术语
$model->getCategory('My Category', 'blog_category')
检查模型是否在给定的分类中有给定的分类
$model->hasCategory('My Category', 'blog_category')
通过(可选)分类从模型中删除术语
$model->removeCategory('My Category', 'blog_category')
从模型中删除(分离)所有分类关系
$model->detachCategories()
通过给定的分类之一范围模型
$model = Model::categorizedIn(['Add','Multiple','Categories'], 'blog_category')->get();
通过一个分类范围模型
$model = Model::categorized('My Category', 'blog_category')->get();
辅助函数
我提供了一组辅助函数供您方便使用,请参阅src/helpers.php
。
示例
将分类添加到Eloquent模型
$post = Post::find(1); $post->addCategory('My First Category', 'blog_category'); $post->addCategories(['Category Two', 'Category Three'], 'blog_category');
首先,此片段将在您的terms
表中创建三个条目,如果它们还不存在的话
- 我的第一个分类
- 分类二
- 分类三
然后它将在您的taxonomies
表中创建三个条目,将术语与给定的分类“分类”相关联。
最后,它将您的taxonomies
表中的条目与您的模型(在这个例子中是“Post”模型)在pivot
表中相关联。
为什么有三个表呢?
想象一下,您有一个名为post_cat的Taxonomy和另一个名为product_cat的Taxonomy,第一个对您的博客文章进行分类,第二个对您的在线商店中的产品进行分类。现在,您使用$product->addCategory('Shoes', 'product_cat');
将一个产品添加到名为Shoes的分类(术语)中。之后,您想写一篇关于该产品的博客文章,并使用$product->addCategory('Shoes', 'post_cat');
将这篇文章也添加到名为Shoes的post_cat中。
通常情况下,现在您的数据库中会有两个条目,一个像['Shoes','product_cat']
,另一个像['Shoes','post_at']
。哦,现在您意识到您拼错了Shoes,现在您需要更改两次,每次更改一个Taxonomy。
因此,我想让我的Terms在我整个应用程序中都是唯一的,这就是为什么我将它们从Taxonomies中分离出来,并且简单地关联它们。
变更日志
- [2021-02-09] v1.0 扩展了数据库表以支持UUIDs(确保在现有模型上生成一些)和更好的自定义。整个包中有许多破坏性更改。
许可证
在MIT许可证下授权。
作者
由Alexander Manfred Poellmann在维也纳和罗马手工制作。