veiliglanceren/laravel-morph-categories

A Laravel package to support polymorphic category relationships for any model.

2.0.2 2025-07-30 13:44 UTC

README

Latest Version on Packagist Total Downloads

A Laravel package to add polymorphic category support to any model. Easily attach, detach, sync, and query categories using elegant Eloquent relationships.

๐Ÿš€ Installation

composer require veiliglanceren/laravel-morph-categories

๐Ÿ“ฆ Usage

1. Add Trait to Your Model

use VeiligLanceren\LaravelMorphCategories\Traits\HasCategory;

class Post extends Model
{
    use HasCategory;
}

2. Attach, Detach & Sync Categories

$post = Post::find(1);
$category = MorphCategory::create(['name' => 'News']);

$post->attachCategory($category);
$post->detachCategory($category);
$post->syncCategories([$category->id]);

You can also use slugs or IDs:

$post->hasCategory('news'); // by slug
$post->hasCategory($category); // by model
$post->hasCategory($category->id); // by ID

โœ… Use Cases

  • Rename tables if you already use categories for something else.
  • Replace the model class with your own Category or Categoryable implementation.

โš™๏ธ Configuration

You can publish and customize the config file:

php artisan vendor:publish --tag=category-config

This will create a file at config/category.php with the following structure:

return [

    'tables' => [
        'categories' => 'categories',
        'categoryables' => 'categoryables',
    ],

    'models' => [
        'category' => \VeiligLanceren\LaravelMorphCategories\Models\MorphCategory::class,
        'categoryable' => \VeiligLanceren\LaravelMorphCategories\Models\MorphCategoryable::class,
    ],
];

๐Ÿ” Relationships

$post->morphCategories; // Collection of MorphCategory models

$category->morphCategoryables; // MorphToMany to all related models

๐Ÿ” Query Scoping

You can query models with specific categories:

Post::withCategory('news')->get();
Post::withCategory($category)->get();

๐Ÿงช Testing

This package uses Pest and Orchestra Testbench:

composer test

Or manually:

vendor/bin/pest

๐Ÿ“„ License

The MIT License (MIT). Please see License File for more information.

๐Ÿ‘ค Author

Developed and maintained by Niels Hamelink at VeiligLanceren.nl.