haider00125/belongs-to-many-field

字段中的 belongsToMany nova 表示。

2.0.1 2022-05-16 09:21 UTC

README

Belongs To Many 字段用于在字段中表示多对多关系。此字段允许轻松附加关系。此外,您还可以

  • 向多选查询传递查询
  • 依赖于 BelongsTo 字段
  • 它在索引、详情和表单中可用!

image

安装

composer require haider00125/belongs-to-many-field

用法

在您需要的资源中,您需要传递

  • 方法 make ('标签', '多对多关系函数名', 'Nova 资源关系')
use Haider00125\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 Haider00125\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);
    }
}
     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 Haider00125\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()),
    ];
}

image

翻译

要发布翻译

php artisan vendor:publish --provider="Haider00125\BelongsToManyField\FieldServiceProvider"

此包包含以下 vue-multiselect 插件的翻译。

  • en, ru.

要翻译验证,请使用 Laravel 验证翻译。

此包是以下包的分支:https://github.com/Benjacho/belongs-to-many-field-nova