nevadskiy / nova-collection-field
Laravel Nova 的集合字段。
0.3.0
2023-12-09 15:42 UTC
Requires
- php: ^8.0
Suggests
- nevadskiy/laravel-many-to-morph: Required to use ManyToMorphCollection field.
This package is auto-updated.
Last update: 2024-09-09 17:16:57 UTC
README
使用方法
HasManyCollection
FaqSection 资源
namespace App\Nova; use App\Models\FaqSection as FaqSectionModel; use App\Nova\Resource; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; use Nevadskiy\Nova\Collection\HasManyCollection; class FaqSection extends Resource { public static string $model = FaqSectionModel::class; public static $title = 'heading'; public static $search = [ 'heading', ]; public function fields(NovaRequest $request): array { return [ ID::make(), Text::make('Heading'), HasManyCollection::make('Questions', 'items', FaqItem::class) ->sortBy('position') ->stacked() ->fullWidth() ]; } }
FaqSection 模型
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; class FaqSection extends Model { public function items(): HasMany { return $this->hasMany(FaqItem::class); } }
MorphToManyCollection
用于定义了 多对多(多态) 关系的 Page
模型的使用示例。
Page 资源
namespace App\Nova; use App\Models\Page as PageModel; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; use Nevadskiy\Nova\Collection\MorphToManyCollection; class Page extends Resource { public static string $model = PageModel::class; public function fields(NovaRequest $request): array { return [ ID::make(), Text::make('Title'), MorphToManyCollection::make('Components') ->resources([ 'heroSections' => HeroSection::class, 'demoSections' => DemoSection::class, 'faqSections' => FaqSection::class, ]) ->sortBy('position') ->attachable() ->collapsable() ->stacked() ->fullWidth(), ]; } }
Page 模型
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphToMany; class Page extends Model { public function heroSections(): MorphToMany { return $this->morphedByMany(HeroSection::class, 'page_component') ->withPivot('position'); } public function demoSections(): MorphToMany { return $this->morphedByMany(DemoSection::class, 'page_component') ->withPivot('position'); } public function faqSections(): MorphToMany { return $this->morphedByMany(FaqSection::class, 'page_component') ->withPivot('position'); } }
ManyToMorphCollection
如果您不想为每种模型类型定义单独的关系,您可以使用需要单独 ManyToMorph 关系的 ManyToMorphCollection
字段。
定义了 Many-To-Morph 关系的 Page
模型的使用示例。
Page 资源
namespace App\Nova; use App\Models\Page as PageModel; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; use Nevadskiy\Nova\Collection\MorphToManyCollection; class Page extends Resource { public static string $model = PageModel::class; public function fields(NovaRequest $request): array { return [ ID::make(), Text::make('Title'), ManyToMorphCollection::make('Components') ->resources([ HeroSection::class, DemoSection::class, FaqSection::class, ]) ->sortBy('position') ->attachable() ->collapsable() ->stacked() ->fullWidth(), ]; } }
Page
模型
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Nevadskiy\ManyToMorph\HasManyToMorph; use Nevadskiy\ManyToMorph\ManyToMorph; class Page extends Model { use HasManyToMorph; public function components(): ManyToMorph { return $this->manyToMorph('page_component'); } }
待办事项列表
- 验证
- 详情视图
- 如果不使用 attachable 模式,则删除并解除绑定