kayacekovic / belongs-to-many-field
字段中belongsToMany nova表示。
1.8
2020-06-25 14:27 UTC
Requires
- php: >=7.1.0
README
将多对多字段用于表示字段中的多对多关系。此字段允许轻松附加关系。此外,您还可以
- 传递查询到多选框
- 依赖于BelongsTo字段
- 它在索引、详细信息和表单中可用!
安装
composer require kayacekovic/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('列名'), 当您的表中没有'名称'列且您希望按其他列名标签化时使用此方法。默认情况下,它通过标签'名称'跟踪。
重要
- 如果您希望在表单显示时按其他列名标签化,您需要在您的关联资源上设置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')->relationModel(\App\User::class)->rules('required', 'min:1', 'max:5', 'size:3', new CustomRule), ]; }
对于此验证的翻译,使用正常的laravel验证翻译。
致谢:https://github.com/manmohanjit/nova-belongs-to-dependency