benjacho / belongs-to-many-field
字段中表示 belongsToMany nova 表示形式。
3.0.1-beta
2023-02-24 05:36 UTC
Requires
- php: ^8.1
- dev-master
- 3.0.1-beta
- 3.0-beta
- 2.0
- 1.9
- 1.8
- 1.7
- 1.6
- 1.5.5.1
- 1.5.5
- 1.5.4
- 1.5.3.1
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5
- 1.4
- 1.3
- 1.2.1
- 1.2
- 1.1
- 1.0
- 0.8
- 0.7
- 0.6
- 0.5
- 0.4
- 0.3
- 0.2
- 0.1
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/express-4.18.2
- dev-dependabot/npm_and_yarn/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/terser-4.8.1
- dev-dependabot/npm_and_yarn/async-2.6.4
- dev-dependabot/npm_and_yarn/minimist-1.2.6
- dev-dependabot/npm_and_yarn/follow-redirects-1.14.8
- dev-dependabot/npm_and_yarn/nanoid-3.2.0
- dev-dependabot/npm_and_yarn/nth-check-2.0.1
This package is auto-updated.
Last update: 2024-09-24 09:05:50 UTC
README
Belongs To Many 字段用于在字段中仅表示多对多关系。该字段允许轻松地附加关系。
- 为 Nova 4 使用版本 3
- 为 Nova 3 使用版本 2
此外,您还可以
- 将查询传递到多选框
- 依赖于 BelongsTo 字段
- 它在索引、详细信息和表单中均可用!
安装
composer require benjacho/belongs-to-many-field
用法
在资源中您需要传递
- 方法 make ('标签', '多对多关系函数名称', 'Nova 资源关系')
use Benjacho\BelongsToManyField\BelongsToManyField; public function fields(Request $request){ return [ ..., //If you are using with BelongsToMany native Field, put this field after BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role'), ]; }
函数
- 方法 optionsLabel('列名称'), 当您的表中没有 'name' 列时,您想要通过另一个列名称来标记,默认情况下它会通过 'name' 标签跟踪。
重要
- 如果您想在表单中按另一个列名称标记,则需要设置关系资源上的 title() 方法,该方法返回用于标记的字符串,同时不要忘记添加 optionsLabel() 方法以在详细信息和索引中显示。
use Benjacho\BelongsToManyField\BelongsToManyField; public function fields(Request $request){ BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')->optionsLabel('full_role_name'), }
- 获取在操作中发送的数据
public function handle(ActionFields $fields, Collection $models) { //note that roles is the many to many relationship function name $values = array_column(json_decode(request()->roles, true),'id'); foreach ($models as $model) { $model->roles()->sync($values); } }
- 方法 setMultiselectProps($props),此方法允许您设置 vue multiselect 组件 的属性
BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role') ->options(\App\Role::all()) ->setMultiselectProps([ 'selectLabel' => 'click for select', // and others from docs ]);
- 方法 dependsOn($dependsOnvalue, $dependsOnKey),此方法允许您依赖于 belongsto 字段,这会创建自动查询
BelongsTo::make('Association', 'association', 'App\Nova\Association'), BelongsToManyField::make('Participants', 'participant', 'App\Nova\Participant') ->dependsOn('association', 'association_id'),
- 方法 canSelectAll($messageSelectAll),此方法允许您显示全选复选框,如果不传递消息,则默认显示
BelongsToManyField::make('Participants', 'participant', 'App\Nova\Participant') ->canSelectAll('Seleccionar Todo'),
- 方法 showAsListInDetail(),此方法允许您将默认视图更改为详细信息中的列表
BelongsToManyField::make('Participants', 'participant', 'App\Nova\Participant') ->showAsListInDetail(),
验证
此包实现了所有 Laravel 验证规则,您需要在 rules 方法中传递规则,规则列在 Laravel 验证规则数组*中。
use Benjacho\BelongsToManyField\BelongsToManyField; public function fields(Request $request){ return [ ..., BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')->rules('required', 'min:1', 'max:5', 'size:3', new CustomRule()), ]; }
翻译
要发布翻译
php artisan vendor:publish --provider="Benjacho\BelongsToManyField\FieldServiceProvider"
此包包含以下 vue-multiselect 插件的翻译。
- en, ru, 和 nl。
要翻译验证,请使用 Laravel 验证翻译。
感谢: https://github.com/manmohanjit/nova-belongs-to-dependency
待办事项
该项目是我的第一个开源项目,因此我想添加一个路线图。
我将此包迁移到使用 Nova 4,此迁移仅考虑了详细、索引和表单视图。这意味着它可能与其他功能存在错误。
- 向项目中添加测试,添加测试将提高代码质量。它还将有助于实现其他功能。
- 测试所有实现的功能并改进维基百科。
- 实现来自 Nova 的原生依赖性,这仅考虑具有 dependsOn BelongsTo 字段
- 使用 Spatie Translatable 实现 es、fr、de 的翻译
- 支持通过原生 Nova 4 的内联创建
- 从 nova 主题继承的内置主题