granello / nova-belongsto-depend
Laravel Nova 字段。
3.0.7
2021-11-10 16:01 UTC
Requires
- php: >=7.1.0
README
我做了什么更改
- 引入了正确的修改 orlyapps/nova-belongsto-depend#96
- 添加了第四个参数
$parentResource
以处理Nova资源与Laravel模型名称不同的情况。
使用较旧的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'), ]; }
选项
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; })
示例
- 仓库具有多个文章
- 文章与供应商多对多关联
- 供应商与文章多对多关联
- 选择一个仓库以获取仓库中的所有文章
- 选择一个文章以获取拥有该文章的所有供应商
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')
以下是一个示例
- 分类具有多个模型且与品牌多对多关联
- 品牌具有多个模型且与分类多对多关联
- 模型属于分类且属于品牌
- 选择一个分类以获取该分类的所有品牌
- 选择一个品牌以获取具有该分类和品牌的所有模型
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)。有关更多信息,请参阅许可证文件。