vendocrat/laravel-taxonomies

此包已被放弃且不再维护。作者建议使用lecturize/laravel-taxonomies包。

Laravel的简单、可嵌套的术语和分类(类似于WordPress)。

v1.0.5 2021-06-27 17:46 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:50:43 UTC


README

Latest Stable Version Total Downloads License

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');将这篇文章也添加到名为Shoespost_cat中。

通常情况下,现在您的数据库中会有两个条目,一个像['Shoes','product_cat'],另一个像['Shoes','post_at']。哦,现在您意识到您拼错了Shoes,现在您需要更改两次,每次更改一个Taxonomy。

因此,我想让我的Terms在我整个应用程序中都是唯一的,这就是为什么我将它们从Taxonomies中分离出来,并且简单地关联它们。

变更日志

  • [2021-02-09] v1.0 扩展了数据库表以支持UUIDs(确保在现有模型上生成一些)和更好的自定义。整个包中有许多破坏性更改。

许可证

MIT许可证下授权。

作者

Alexander Manfred Poellmann在维也纳和罗马手工制作。