PHPackages                             fomvasss/laravel-taxonomy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fomvasss/laravel-taxonomy

ActiveComposer-package[Utility &amp; Helpers](/categories/utility)

fomvasss/laravel-taxonomy
=========================

Management of taxonomy in Laravel projects

4.7.0(2y ago)37011MITPHPPHP ^7.1|^8.0

Since Dec 12Pushed 2y ago1 watchersCompare

[ Source](https://github.com/fomvasss/laravel-taxonomy)[ Packagist](https://packagist.org/packages/fomvasss/laravel-taxonomy)[ Docs](https://bitbucket.org/fomvasss/laravel-taxonomy)[ RSS](/packages/fomvasss-laravel-taxonomy/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (3)Versions (27)Used By (0)

**Development and support of this package is discontinued! Use a better solution [fomvasss/laravel-simple-taxonomy](https://github.com/fomvasss/laravel-simple-taxonomy)**

Laravel Taxonomy
================

[](#laravel-taxonomy)

[![License](https://camo.githubusercontent.com/d5615251f2cea79e45a4d1d6e6b3c4194ad2328e6f8a5eadda0c2bd09f602ee1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f666f6d76617373732f6c61726176656c2d7461786f6e6f6d792e7376673f7374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/fomvasss/laravel-taxonomy)[![Build Status](https://camo.githubusercontent.com/d1bed2eb56c79c8cb21bab4bd5bf7ec9d5fb0e693509806838eb2bac2175de73/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f666f6d76617373732f6c61726176656c2d7461786f6e6f6d792e7376673f7374796c653d666f722d7468652d6261646765)](https://github.com/fomvasss/laravel-taxonomy)[![Latest Stable Version](https://camo.githubusercontent.com/9ccf9734d94df71df6f71e1cc6066a309208a05876d3aa1f857e6eebf2cdb286/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666f6d76617373732f6c61726176656c2d7461786f6e6f6d792e7376673f7374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/fomvasss/laravel-taxonomy)[![Total Downloads](https://camo.githubusercontent.com/c95981611413c05d414e8fadc1b79251cd3eab246b7bc8441e6b4b4624572663/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666f6d76617373732f6c61726176656c2d7461786f6e6f6d792e7376673f7374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/fomvasss/laravel-taxonomy)[![Quality Score](https://camo.githubusercontent.com/a28eb28a389c932c0ec7ffb48be3c9b9f07c31dcc4df563ba60c7db63577cc2f/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f666f6d76617373732f6c61726176656c2d7461786f6e6f6d792e7376673f7374796c653d666f722d7468652d6261646765)](https://scrutinizer-ci.com/g/fomvasss/laravel-taxonomy)

Create and manage taxonomy categories (terms) in Laravel Eloquent.

Установка
---------

[](#установка)

```
composer require fomvasss/laravel-taxonomy
```

### Publishing resources

[](#publishing-resources)

```
php artisan vendor:publish --provider="Fomvasss\Taxonomy\TaxonomyServiceProvider"
```

После публикации ресурсов, вы можете изменить файл миграции, seeder и переопределить Eloquent-модели термов, словарей.

```
composer dump-autoload
php artisan migrate
php artisan db:seed --class=TaxonomySeeder
```

> При использовании переопределенных классов моделей терминов и словарей, нужно указать в конфигу `taxonomy.php` пути этих моделей, иначе система будет работать не так как вы планируете!

Usage
-----

[](#usage)

### Usage in own models

[](#usage-in-own-models)

> Для использование в ваших моделях таксономии, нужно подключить трейт `HasTaxonomies` в котором есть relation methods &amp; scope`s:

#### Relations

[](#relations)

- `termsByVocabulary()` - Связь текущей модели с термамы по указанному словарю (по `system_name`). Используется для создание связей с термамы нужного словаря в своих моделях
- `terms()` - Сущность текущей модели "относится" к разным термам (полиморфизм), например: товар в магазине относится к разным категориям
- `term()` - Сущность имеет один терм (ключ для связи создается в таблице текущей сущности), например: экземпляр автомобиля имеет бренд

#### Scopes

[](#scopes)

- `termsByVocabulary()` - Термы текущей модели по указанному словарю (по `system_name`). Не путать с связью `termsByVocabulary()`!
- `byTaxonomies()` - Сущности по указанным термам с соответствующих указанных словарей (ключи по умолчанию: `vocabulary.system_name`, `term.id`)

Можно создавать в своих моделях, свои, более удобные, методы для связей, на основе метода-связи `terms()`.

Например: модель статьи `Article` относится к разным термам-категориям `Term` со словаря (`Vocabulary`) "Категории статей" (`vocabularies.id` = 1, `vocabularies.system_name` = "article\_categories") то метод связи между статьей и ее категориями можно назвать `txArticleCategories` и записать как:

> Удобно строить связь используя метод `termsByVocabulary()` и указывая системное имя нужного словаря:

```
public function txArticleCategories()
{
    return $this->termsByVocabulary('article_categories');
}
```

> В ваших методах, для связей с таксономией (термины, словари), рекомендуется использовать как стандарт префикс "tx" (`txArticleCategories`, `txArticleStatus`, `txBrands` `txRegion`,...) - это только рекомендация:)

Например, если метод `txArticleCategories()` использовать в модели `Article`, то он описывает связь статьи с категориямы.

Все категории статьи можно получить:

```
$article = Models\Article::first()->txArticleCategories;
```

Аналогично, можно использовать метод `term()` в вашей модели. Например, опишем связь статьи с термом словаря статусов модерации статьи, при этом укажем поля для связей модели терма-статуса с самой моделью статьи:

```
public function txArticleStatus()
{
    return $this->term('status', 'system_name')
        ->where('vocabulary', 'article_statuses');
}
```

где:

- `txArticleStatus` - название метода для связи сущности-статьи с термом-статусом (можно любое, по правилам Laravel)
- `status` - поле в таблице текущой сущности (статьи), где хранится статус, через которое и установленная связь с термом (`articles.status`)
- `system_name` - поле в таблице термов (в нашем случае записано системное имя статуса) (`terms.system_name`)
- `vocabulary` - поле в таблице термов, в котором записано систимное название словаря (`terms.vocabulary`)
- `article_statuses` - название словаря, записанное в таблице термов (`terms.vocabulary`)

Например, если метод `txArticleStatus()` использовать в модели `Article`, то он описывает статус статьи.

Данные терма-статуса, например имя статуса, можно получить:

```
$article = \App\Models\Article::first();
$article->txArticleStatus->name;
```

В переопределенной модели `Term` вы можете описать метод, для получения всех статтей по терму-категории:

```
public function articles()
{
    return $this->morphedByMany(Article::class, 'termable');
}
```

И использовать его:

```
    Term::byVocabulary('article_categories')->first(13)->articles
```

### Методы в модели Vocabulary

[](#методы-в-модели-vocabulary)

#### Связи

[](#связи)

- `terms()` - Словарь имет много термов

#### Полиморфные связи

[](#полиморфные-связи)

- `vocabulariesByMany()` - Сущность текущей модели "держит" много словарей
- `vocabulariesToMany()` - Сущность текущей модели "относится" к разным словарям
- `termsByMany()` - Сущность текущей модели "держит" много термов
- `termsToMany()` - Сущность текущей модели "относится" к разным термам

---

### Методи в модели Term

[](#методи-в-модели-term)

#### Связи

[](#связи-1)

- `txVocabulary()` - Терм "пренадлежит" одному словарю

#### Полиморфные связи

[](#полиморфные-связи-1)

- `vocabulariesByMany()` - Сущность текущей модели "держит" много словарей
- `vocabulariesToMany()` - Сущность текущей модели "относится" к разным словарям
- `termsByMany()` - Сущность текущей модели "держит" много термов
- `termsToMany()` - Сущность текущей модели "относится" к разным термам (или `terms()` с трейта `HasTaxonomies`)

#### Scopes в модели Term

[](#scopes-в-модели-term)

- `byVocabulary()` - Все термы по указанному словарю

#### Работа с иерархией в терминах таксономии (рекомендации)

[](#работа-с-иерархией-в-терминах-таксономии-рекомендации)

- Работа с иерархией в этом пакете построена на ["laravel-nestedset"](https://github.com/lazychaser/laravel-nestedset)
- Для моделей термов доступны все методы пакета `laravel-nestedset`.

---

Еще примеры использования:
--------------------------

[](#еще-примеры-использования)

```
\App\Models\Taxonomy\Term::find(1)->vocabulary; // get system name vocabulary

\App\Models\Taxonomy\Term::find(1)->txVocabulary; // get related model vocabulary

\App\Models\Taxonomy\Term::byVocabulary('article_categories')->get(); // get terms by system name vocabulary

\App\Models\Taxonomy\Term::byVocabulary('article_categories')->get()->toTree(); // `toTree` - method from package `lazychaser/laravel-nestedset`

\App\Models\Taxonomy\Term::find(1)->descendants; // `descendants` - method from package `lazychaser/laravel-nestedset`

\App\Models\Article::with('txArticleCategories')->get(); // get articles with article categories

\App\Models\Article::first()->txArticleCategories()->attach([1, 2]);

\App\Models\Article::first()->txArticleCategories()->sync([4, 2]); // this detach all terms in article and sync 4 ,2!!! Same as:

\App\Models\Article::first()->terms()->sync([4, 2]);

\App\Models\Article::first()->terms()->detach([4]);

\App\Models\Article::first()->txArticleCategories()->syncWithoutDetaching([4, 2]); // sync terms without detaching

\App\Models\Article::byTaxonomies([
    'article_categories' => [1,3,5],
    'cities' => [3]
])->get(); // use for example for filters
```

Links
-----

[](#links)

-
- [https://en.wikipedia.org/wiki/Taxonomy\_(general)](https://en.wikipedia.org/wiki/Taxonomy_(general))
- [https://en.wikipedia.org/wiki/Nesting\_(computing)](https://en.wikipedia.org/wiki/Nesting_(computing))

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity78

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~79 days

Recently: every ~211 days

Total

26

Last Release

1090d ago

Major Versions

1.2.1 → 2.0.02018-06-13

2.1.0 → 3.0.02018-10-27

3.2.0 → 4.0.02019-09-26

PHP version history (3 changes)1.0.0PHP &gt;=7.0.0

4.0.0PHP &gt;=7.1.3

4.6.0PHP ^7.1|^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/4f99b460639e7d6871597882226b1e0d9e3055992eac8b22bfcd4f90fbdac95c?d=identicon)[fomvasss](/maintainers/fomvasss)

---

Top Contributors

[![fomvasss](https://avatars.githubusercontent.com/u/19834478?v=4)](https://github.com/fomvasss "fomvasss (26 commits)")

---

Tags

laraveltreenestedsetcategoriestaxonomycategorizationtermslaravel-taxonomy

### Embed Badge

![Health badge](/badges/fomvasss-laravel-taxonomy/health.svg)

```
[![Health](https://phpackages.com/badges/fomvasss-laravel-taxonomy/health.svg)](https://phpackages.com/packages/fomvasss-laravel-taxonomy)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[aliziodev/laravel-taxonomy

Laravel Taxonomy is a flexible and powerful package for managing taxonomies, categories, tags, and hierarchical structures in Laravel applications. Features nested-set support for optimal query performance on hierarchical data structures.

23318.4k](/packages/aliziodev-laravel-taxonomy)[glhd/special

1929.4k](/packages/glhd-special)[bjuppa/laravel-blog

Add blog functionality to your Laravel project

483.3k2](/packages/bjuppa-laravel-blog)[wsmallnews/filament-nestedset

Filament nestedset tree builder powered by kalnoy/nestedset with Filament v4 and v5 support

163.0k8](/packages/wsmallnews-filament-nestedset)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
