webparking / nova-belongs-to-dependency
Extended Laravel Nova BelongsTo field that can depend on other fields
Installs: 44 399
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 1
Forks: 26
Open Issues: 2
Language:Vue
Requires
- php: ^7.3|^8
- laravel/nova: ^4.0
README
This package is an extension of Laravel Nova's existing BelongsTo field and Vue components.
Originally created by manmohanjit, the original package was abandoned.
Requirements
- PHP 7.3+
- Nova 4
Use the 1.x versions if you need support for Nova 3
Installation
You can install this package on a Laravel app that uses Nova via composer:
composer require webparking/nova-belongs-to-dependency
Usage
The following will list categories with type_id
equal to the value set in the first BelongsTo field.
use Webparking\BelongsToDependency\BelongsToDependency; ... return [ ... BelongsTo::make('Type'), BelongsToDependency::make('User') ->dependsOn('type', 'type_id'), ... ];
Look at the example below for other use cases.
Example
Database Structure
- Type (id, name)
- Posts (id, type_id, category_id, title, body)
- Category (id, type_id, title)
We should only be able to assign categories to posts that belong to the same type.
This is how you would achieve it on the Nova category resource:
use Webparking\BelongsToDependency\BelongsToDependency; ... return [ ... BelongsTo::make('Type'), BelongsToDependency::make('User') ->dependsOn('type', 'type_id'), ... ];
This would work if you used a text/enum type
field too.
use Webparking\BelongsToDependency\BelongsToDependency; ... return [ ... Select::make('Type')->options([ 'post' => 'Post', 'page' => 'Page', ])>displayUsingLabels(), BelongsToDependency::make('User') ->dependsOn('type', 'type'), ... ];
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
- nova-belongsto-depend (alternative)
- nova-dependency-container
This tool extends the base Laravel Nova BelongsTo field and is inspired by Nova Dependency Container.
License
The MIT License (MIT). Please see License File for more information.