everestmx/nova-belongs-to-many-field

字段中属于多对多的nova表示。

此包的规范存储库似乎已丢失,因此已冻结此包。

0.0.5 2019-09-25 19:21 UTC

This package is auto-updated.

Last update: 2024-06-29 04:40:26 UTC


README

多对多字段Nova

在字段中表示多对多关系的多对多字段。此字段允许轻松附加关系,你可以将查询传递给多重选择。

安装

composer require everestmx/nova-belongs-to-many-field

弃用

relationModel() 方法不再需要,为了避免冲突,它将保留在那里。并且 HasBelongsToMany 特性也不再需要,两者都将保留在存储库中,但不起作用。

使用方法

在资源中你需要传递

  • make (标签,多对多关系,Nova 资源关系) 方法
  • options (在这里你传递需要渲染在多重选择中的选项,你可以传递查询,使用 get() 方法来实现这一点)
  • 你不需要传递 onlyOnForms(),这是默认的。
use Everestmx\BelongsToManyField\BelongsToManyField;

public function fields(Request $request){
    BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')
        ->options(\App\Role::all()),
}

可选

  • optionsLabel('columnName') 方法,当你表中没有 'name' 列且你希望用另一个列名标记时使用此方法。默认情况下它跟踪 'name' 标签
use Everestmx\BelongsToManyField\BelongsToManyField;

public function fields(Request $request){
    BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')
        ->options(\App\Role::all())
        ->optionsLabel('title'),
}
  • isAction() 方法,当你需要在动作中使用此字段时使用此方法,这将字段的高度设置为 350px,并将其转换为动作。
use Everestmx\BelongsToManyField\BelongsToManyField;

public function fields(Request $request){
    BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')
        ->options(\App\Role::all())
        ->isAction(),
}

为了获得在动作中发送的数据,请这样做

public function handle(ActionFields $fields, Collection $models)
{
    // Get the expenseTypes from the request because the Field BelongsToManyField does not send it
    
    $values = array_column(json_decode(request()->roles, true),'id');
    
    foreach ($models as $model) {
        $model->roles()->sync($values);
    }
}

验证

此包实现了所有 Laravel 验证,你需要在 rules 方法中传递规则,规则列在 Laravel 验证规则数组*中。

use Everestmx\BelongsToManyField\BelongsToManyField;

public function fields(Request $request){
    BelongsToManyField::make('Role Label', 'roles', 'App\Nova\Role')
        ->options(\App\Role::all())
        ->relationModel(\App\User::class)
        ->rules('required', 'min:1', 'max:5', 'size:3' new CustomRule),
}

对于这些验证的翻译,使用正常的 Laravel 验证翻译。