orlyapps/nova-belongsto-depend
Composer 安装命令:
composer require orlyapps/nova-belongsto-depend
包简介
A Laravel Nova field.
README 文档
README
Using an older version of Laravel?
This version is compatible with Laravel 5.8 and newer.
If you use an older version of Laravel you can use an older version of the package. These aren't maintained anymore, but they should be pretty stable. We still accept small bugfixes.
Installation
You can install the package in to a Laravel app that uses Nova via composer:
composer require orlyapps/nova-belongsto-depend
Use this field in your Nova Resource
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'), ]; }
Method dependsOn takes the name property of the fields it depends on.
Use the field's attribute value if you specified it manually.
Options
placeholder('Optional Placeholder')
openDirection('top')
See options values from vue-multiselect
Translation
The following strings are translatable (add then in your language file located in 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'
If you do use nova-translatable and would like to return the translated name add this to your translatable model:
/** * @return mixed */ public function getNameAttribute() { return $this->getTranslations('name')[app()->getLocale()]; }
Performance Tips
When attaching this field to a resource, you may include the field relation in the $with property for that resource to prevent n+1 issues when loading an index page for that resource.
class Company extends Resource { public static $with = []; } class Department extends Resource { public static $with = ['company']; } class Location extends Resource { public static $with = ['department', 'company']; }
You may also choose to cache your top-level model to reduce the number of queries made to the database for each row in an index.
NovaBelongsToDepend::make('Company') ->options(Cache::remember( 'companies', 60, function () { return Company::all(); } )), NovaBelongsToDepend::make('Department') ->dependsOn('Company') ->optionsResolve(function($company) { return $company->departments; })
Sample
- Warehouse hasMany Articles
- Articles belongsToMany Suppliers
- Suppliers belongsToMany Articles
- Select a Warehouse and get all articles of the warehouse
- Select a Article and get all suppliers who has this article
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'), ]; }
Depend on several fields
CleanShot.2021-05-25.at.13.25.38.mp4
From version 3 of this package you can depend on several fields. Just pass them comma separated in the dependsOn method.
->dependsOn('classification', 'brand')
Here an example:
- Classification hasMany Models && belongsToMany Brands
- Brand hasMany Models && belongsToMany Classification
- Model belongsTo Classification && belongsTo Brand
- Select a Classification and get all Brands of the classification
- Select a Brand and get all Models that has this Classification and 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'), ]; }
Security
If you discover any security related issues, please email info@orlyapps.de instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
orlyapps/nova-belongsto-depend 适用场景与选型建议
orlyapps/nova-belongsto-depend 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 859.46k 次下载、GitHub Stars 达 180, 最近一次更新时间为 2018 年 08 月 31 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「nova」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 orlyapps/nova-belongsto-depend 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 orlyapps/nova-belongsto-depend 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 orlyapps/nova-belongsto-depend 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel Nova card that shows you your system information.
A Laravel Nova card.
A Laravel Nova package for publishable fields
A Laravel Nova package for translatable fields
A Laravel Nova Image field. you can paste or drag or chose an image
A Laravel Nova Mail testing tool.
统计信息
- 总下载量: 859.46k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 181
- 点击次数: 17
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-08-31
