emilianotisato / nova-belongsto-depends
一个依赖于另一个 BelongsTo 关系的 Laravel Nova 字段。
0.1.4
2019-02-06 19:01 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-22 00:18:14 UTC
README
此包基于原始的 Orlyapps 包,我们不知道该包是否仍在维护。
安装
您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包
composer require emilianotisato/nova-belongsto-depends
在您的 Nova 资源中使用此字段
// Add the use statement a the top of your nova resource use EmilianoTisato\NovaBelongsToDepends\NovaBelongsToDepends; // ... public function fields(Request $request) { return [ ID::make()->sortable(), Text::make('Name')->rules('required', 'max:255'), NovaBelongsToDepends::make('Company') ->options(\App\Company::all()), NovaBelongsToDepends::make('Department') ->optionsResolve(function ($company) { // Reduce the amount of unnecessary data sent return $company->departments()->get(['id','name']); }) ->dependsOn('Company'), NovaBelongsToDepends::make('Location') ->optionsResolve(function ($company) { // Reduce the amount of unnecessary data sent return $company->locations()->get(['id','name']); }) ->dependsOn('Company'), ]; }
示例
- 仓库具有多篇文章
- 文章与供应商的多对多关系
- 供应商与文章的多对多关系
- 选择一个 仓库 以获取该仓库的所有文章
- 选择一个 文章 以获取拥有此文章的所有供应商
public function fields(Request $request) { return [ ID::make()->sortable(), Text::make('Name')->rules('required', 'max:255'), NovaBelongsToDepends::make('Warehouse') ->options(\App\Warehouse::all()) ->rules('required'), NovaBelongsToDepends::make('Article') ->optionsResolve(function ($warehouse) { return $warehouse->articles; }) ->dependsOn('Warehouse') ->rules('required'), NovaBelongsToDepends::make('Supplier') ->optionsResolve(function ($article) { return \App\Supplier::whereHas('articles', function ($q) use ($article) { $q->where('article_id', $article->id); })->get(); }) ->dependsOn('Article') ->rules('required'), ]; }
使用多个实例
有时您需要使用多个实例,或者您可能有同一 Eloquent 模型的第二个资源(例如:App\Nova\User 和 App\Nova\Provider 都代表 App\User 模型)。在这些情况下,为了避免冲突,您可以在元属性中声明特定的 Nova 资源(例如:->withMeta(['calledFromClass' => 'App\Nova\Provider'])
)
NovaBelongsToDepends::make('Client') ->options(\App\Client::all()), NovaBelongsToDepends::make('Provider') ->withMeta(['calledFromClass' => 'App\Nova\Provider']) ->optionsResolve(function ($client) { return $client->providers()->active()->get(['id', 'name']); })->dependsOn('Client') ->rules('required'),
致谢
- 创建者: Orlyapps
- 维护者: Emiliano Tisato
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。