orlyapps / nova-belongsto-depend
Laravel Nova 字段。
3.0.4
2022-06-21 16:03 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-21 23:38:05 UTC
README
使用较旧版本的 Laravel 吗?
此版本与 Laravel 5.8 及更高版本兼容。
如果您使用较旧版本的 Laravel,可以使用该包的较旧版本。这些版本不再维护,但应该相当稳定。我们仍然接受小的错误修复。
安装
您可以通过 composer 将此包安装到使用 Nova 的 Laravel 应用中。
composer require orlyapps/nova-belongsto-depend
在您的 Nova 资源中使用此字段
use Orlyapps\NovaBelongsToDepend\NovaBelongsToDepend; public function fields(Request $request) { return [ ID::make()->sortable(), Text::make('Name')->rules('required', 'max:255'), NovaBelongsToDepend::make('Company') ->placeholder('Optional Placeholder') // Add this just if you want to customize the placeholder ->options(\App\Company::all()), NovaBelongsToDepend::make('Department') ->placeholder('Optional Placeholder') // Add this just if you want to customize the placeholder ->optionsResolve(function ($company) { // Reduce the amount of unnecessary data sent return $company->departments()->get(['id','name']); }) ->dependsOn('Company'), NovaBelongsToDepend::make('Location') ->placeholder('Optional Placeholder') // Add this just if you want to customize the placeholder ->optionsResolve(function ($company) { // Reduce the amount of unnecessary data sent return $company->locations()->get(['id','name']); }) ->fallback( Text::make('Location Name')->rules('required', 'max:255'), ) ->hideLinkToResourceFromDetail() ->hideLinkToResourceFromIndex() ->nullable() ->dependsOn('Company'), ]; }
方法 dependsOn
接收它依赖的字段的 name
属性。如果手动指定了,请使用字段的 attribute
值。
选项
placeholder('可选占位符')
openDirection('top')
查看选项值来自 vue-multiselect
翻译
以下字符串是可翻译的(将其添加到位于 resources/lan/vendor/nova/*.json 的您的语言文件中)。
- 'Oops! No elements found. Consider changing the search query.'
- 'List is empty'
- 'Select'
- 'Press enter to select'
- 'Selected'
- 'Press enter to remove'
如果您使用 nova-translatable 并希望返回翻译后的名称,请将以下内容添加到您的可翻译模型中
/** * @return mixed */ public function getNameAttribute() { return $this->getTranslations('name')[app()->getLocale()]; }
性能提示
当将此字段附加到资源时,您可以在该资源的 $with
属性中包含字段关系,以防止在加载该资源的索引页面时出现 n+1 问题。
class Company extends Resource { public static $with = []; } class Department extends Resource { public static $with = ['company']; } class Location extends Resource { public static $with = ['department', 'company']; }
您还可以选择缓存顶级模型,以减少在索引中每行数据库查询的数量。
NovaBelongsToDepend::make('Company') ->options(Cache::remember( 'companies', 60, function () { return Company::all(); } )), NovaBelongsToDepend::make('Department') ->dependsOn('Company') ->optionsResolve(function($company) { return $company->departments; })
示例
- 仓库 hasMany 文章
- 文章 belongsToMany 供应商
- 供应商 belongsToMany 文章
- 选择一个 仓库 并获取该仓库的所有文章
- 选择一个 文章 并获取所有拥有此文章的供应商
public function fields(Request $request) { return [ ID::make()->sortable(), Text::make('Name')->rules('required', 'max:255'), NovaBelongsToDepend::make('Warehouse') ->options(\App\Warehouse::all()) ->rules('required'), NovaBelongsToDepend::make('Article') ->optionsResolve(function ($warehouse) { return $warehouse->articles; }) ->dependsOn('Warehouse') ->rules('required'), NovaBelongsToDepend::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'), ]; }
依赖多个字段
CleanShot.2021-05-25.at.13.25.38.mp4
从本包的 版本 3 开始,您可以对多个字段进行依赖。只需在 dependsOn 方法中按逗号分隔传递即可。
->dependsOn('classification', 'brand')
以下是一个示例
- 分类 hasMany 模型 && belongsToMany 品牌
- 品牌 hasMany 模型 && belongsToMany 分类
- 模型 belongsTo 分类 && belongsTo 品牌
- 选择一个 分类 并获取该分类的所有 品牌
- 选择一个 品牌 并获取所有具有此 分类 和 品牌 的 模型
public function fields(Request $request) { return [ ID::make(__('ID'), 'id')->sortable(), NovaBelongsToDepend::make('Classification', 'classification') ->options(\App\Models\Classification::all()), NovaBelongsToDepend::make('Brand', 'brand') ->optionsResolve(function ($classification) { return $classification->brands()->get(['brands.id', 'brands.name']); }) ->dependsOn('classification'), NovaBelongsToDepend::make('Model', 'model', VehicleModel::class) ->optionsResolve(function ($depends) { return \App\Models\VehicleModel::query() ->where('classification_id', $depends->classification->id) ->where('brand_id', $depends->brand->id) ->get(); }) ->dependsOn('classification', 'brand'), ]; }
安全
如果您发现任何与安全相关的问题,请通过电子邮件 info@orlyapps.de 联系,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。