PHPackages                             alyakin/favorites - 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. [Database &amp; ORM](/categories/database)
4. /
5. alyakin/favorites

ActiveLibrary[Database &amp; ORM](/categories/database)

alyakin/favorites
=================

Favorites system for Laravel with folder support and polymorphic relations

0.1.0(1y ago)05MITPHPPHP ^8.1CI passing

Since Mar 28Pushed 1y ago1 watchersCompare

[ Source](https://github.com/2177866/laravel-favorites)[ Packagist](https://packagist.org/packages/alyakin/favorites)[ RSS](/packages/alyakin-favorites/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (2)Versions (3)Used By (0)

Laravel Favorites
=================

[](#laravel-favorites)

[![Latest Stable Version](https://camo.githubusercontent.com/7caffdf4313c6cb1139cf7429d7552aff13d56d9e91e91fe7770eabafb894d75/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f616c79616b696e2f6661766f72697465732e7376673f7374796c653d666c61742d737175617265266c6162656c3d737461626c65)](https://packagist.org/packages/alyakin/favorites)[![Latest Unstable Version](https://camo.githubusercontent.com/7a4fdfcad1965de1cdbd3adebf378625d22e71a3d24449cdb8c10dd5e8eb55cd/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f767072652f616c79616b696e2f6661766f72697465732e7376673f7374796c653d666c61742d737175617265266c6162656c3d72656c65617365)](https://packagist.org/packages/alyakin/favorites)[![Total Downloads](https://camo.githubusercontent.com/5d3c32b23295c19861c75444e6ddb4dfa2252d8ad4485eb4224a1f60940084cf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f616c79616b696e2f6661766f72697465732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/alyakin/favorites)[![Laravel Version](https://camo.githubusercontent.com/8f25abae16f776b006879b2eb5859a5b41953380aa0a7df2c36ed9efba1ea7f1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d382b2d6f72616e67652e7376673f7374796c653d666c61742d737175617265)](https://laravel.com)[![PHP Version](https://camo.githubusercontent.com/e9336ae887317cae5a4e64d0e124d6f05b4dbb6884cc8b50612238ad8d3a92ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e312b2d626c75652e7376673f7374796c653d666c61742d737175617265)](https://php.net)[![License](https://camo.githubusercontent.com/28f6f6e6572a85a1990c6fb71652c80b2d99e2d36f29341fa9ed7d0981e1ce67/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f323137373836362f6c61726176656c2d6661766f72697465732e7376673f7374796c653d666c61742d737175617265)](LICENSE)[![Tests](https://github.com/2177866/laravel-favorites/actions/workflows/favorites-tests.yml/badge.svg)](https://github.com/2177866/laravel-favorites/actions)

📦 Описание
----------

[](#-описание)

`Laravel Favorites` — это универсальный модуль для создания полиморфных связей между владельцем и любыми избираемыми сущностями. Позволяет одному владельцу (профилю, пользователю и т.п.) добавлять в избранное объекты разных моделей, таких как товары, статьи, профили, комментарии и др.

Пакет поддерживает:

- организацию избранного по папкам с уникальными названиями,
- работу с UUID и timestamps "из коробки",
- строгую привязку избранного к конкретному владельцу.

🎯 Подходит для
--------------

[](#-подходит-для)

- 💼 **Электронной коммерции** — покупатель может сохранять избранные товары, бренды или подборки.
- 📚 **Контент-платформ** — читатель может добавлять в избранное статьи, авторов или хештеги.
- 📊 **B2B/CRM систем** — пользователь может группировать клиентов, документы или сделки в "избранное" для быстрого доступа.

🧭 Оглавление
------------

[](#-оглавление)

- [Системные требования](#-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Установка](#-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Как использовать](#-%D0%BA%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C)
    - [➕ Добавление в избранное](#-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B8%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5)
    - [➖ Удаление из избранного](#-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8%D0%B7-%D0%B8%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE)
    - [📂 Работа с папками](#-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0%D0%BC%D0%B8)
    - [📄 Получение избранного](#-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE)
- [Кастомизация](#-%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)
    - [🔄 Пример: замена логики добавления](#-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0-%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F)
- [🤝 Сотрудничество](#-%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE)
- [📄 Лицензия](#-%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

🛠 Системные требования
----------------------

[](#-системные-требования)

- PHP **8.1** или выше
- Laravel **10.x** или выше
- Composer для управления зависимостями

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

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

Установите пакет через Composer:

```
composer require alyakin/favorites
```

Файл конфигурации отсутствует — модуль готов к использованию сразу после установки и регистрации провайдера.

⚙️ Как использовать
-------------------

[](#️-как-использовать)

Сервисы можно получить через сервис-контейнер Laravel:

```
use \Alyakin\Favorites\Services\{FavoriteService, FavoriteFolderService};

$favoritesService = app(FavoriteService::class);
$folderService = app(FavoriteFolderService::class);
```

Ниже представлены базовые сценарии использования.

### ➕ Добавление в избранное

[](#-добавление-в-избранное)

```
// Добавить объект в избранное
$favoritesService->addToFavorites($ownerId, $model);

// Добавить в конкретную папку:
$favoritesService->addToFavorites($ownerId, $model, 'read later');
```

### ➖ Удаление из избранного

[](#-удаление-из-избранного)

```
// Удалить объект из избранного:
$favoritesService->removeFromFavorites($ownerId, $model);
```

### 📂 Работа с папками

[](#-работа-с-папками)

```
// Создать папку
$folderService->createFolder($ownerId, 'Папка');

// Переименовать папку
$folderService->renameFolder($ownerId, $folderId, $newName);

// Переместить элемент в папку:
$favoritesService->moveToFolder($favoriteId, $folderId);

// Получить все папки владельца:
$folderService->getAllFoldersForOwner($ownerId);

// Удалить папку:
// ⚠️ ВНИМАНИЕ! При удалении папки будут также удалены все избранные элементы внутри неё.
$folderService->deleteFolder($ownerId, $folderId);
```

### 📄 Получение избранного

[](#-получение-избранного)

```
// Получить все избранные элементы владельца:
$favoritesService->getFavorites($ownerId);

// Получить избранные в конкретной папке:
$favoritesService->getFavorites($ownerId, 'funy');

// Проверить, находится ли объект в избранном:
$favoritesService->isFavorited($ownerId, $model);
```

🎛 Кастомизация
--------------

[](#-кастомизация)

Пакет спроектирован с учетом расширяемости и адаптации под проект.

- Вы можете заменить модель владельца, передавая любой UUID-совместимый `ownerId`.
- Папки не являются обязательными — можно использовать избранное и без них.
- Вся бизнес-логика изолирована в сервисах (`FavoriteService`, `FavoriteFolderService`) и может быть легко расширена или переопределена через DI-контейнер.
- Названия таблиц, столбцов и ключей соответствуют общим стандартам Laravel и могут быть переопределены при необходимости.

### 🔄 Пример: замена логики добавления

[](#-пример-замена-логики-добавления)

Создайте свой кастомный сервис:

```
class CustomFavoriteService extends \Alyakin\Favorites\Services\FavoriteService {
    // ...
}
```

Переопределите нужный метод:

```
public function addToFavorites(string $ownerId, Model $model, ?string $folderName = null): Favorite
{
    // своя логика — например, логирование
    \Log::info('Добавление в избранное', ['owner_id' => $ownerId]);

    return parent::addToFavorites($ownerId, $model, $folderName);
}
```

Зарегистрируйте в AppServiceProvider:

```
$this->app->bind(
    \Alyakin\Favorites\Services\FavoriteService::class,
    \App\Services\CustomFavoriteService::class
);
```

Теперь Laravel будет использовать вашу реализацию вместо базовой.

🤝 Сотрудничество
----------------

[](#-сотрудничество)

Мы открыты к предложениям и улучшениям!

- Сообщайте об ошибках через [Issues](https://github.com/2177866/laravel-favorites/issues)
- Присылайте Pull Requests с улучшениями
- Предлагайте идеи по расширению функциональности

📄 Лицензия
----------

[](#-лицензия)

This package is open-source and available under the [MIT License](LICENSE).

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance46

Moderate activity, may be stable

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 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 ~2 days

Total

2

Last Release

408d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9eab5787b91f8e98e632f072b3f87a3c5d2f1e4c3a68dbdaaca650e022d0ae61?d=identicon)[2177866](/maintainers/2177866)

---

Top Contributors

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

---

Tags

eloquentfavoritesfolderslaravel-packagepolymorphic-relationships

### Embed Badge

![Health badge](/badges/alyakin-favorites/health.svg)

```
[![Health](https://phpackages.com/badges/alyakin-favorites/health.svg)](https://phpackages.com/packages/alyakin-favorites)
```

###  Alternatives

[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[cybercog/laravel-love

Make Laravel Eloquent models reactable with any type of emotions in a minutes!

1.2k302.7k1](/packages/cybercog-laravel-love)[cviebrock/eloquent-taggable

Easy ability to tag your Eloquent models in Laravel.

567694.8k3](/packages/cviebrock-eloquent-taggable)[clickbar/laravel-magellan

This package provides functionality for working with the postgis extension in Laravel.

423715.4k1](/packages/clickbar-laravel-magellan)[genealabs/laravel-pivot-events

This package introduces new eloquent events for sync(), attach(), detach() or updateExistingPivot() methods on BelongsToMany relation.

1404.9M8](/packages/genealabs-laravel-pivot-events)[reedware/laravel-relation-joins

Adds the ability to join on a relationship by name.

2121.2M13](/packages/reedware-laravel-relation-joins)

PHPackages © 2026

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