dominion-solutions/filament-cascading-actions

一个实现级联操作和批量操作的纤维包。

0.0.1-beta.3 2023-11-24 21:03 UTC

This package is auto-updated.

Last update: 2024-08-29 17:13:33 UTC


README

Latest Version on Packagist Total Downloads

跳转到安装说明

此包的作用是什么?

此包将级联数据库操作引入纤维,利用操作。有时你可能不想在数据库的外键关系上设置CASCADE选项,也可能你并不完全拥有数据模式。此包填补了这一空白。级联操作可以作为批量操作、列表表上的操作,以及编辑页或表上的单个操作来包含。它本身不提供任何UI组件,而是使用它所包装的操作的UI元素(例如DeleteAction)。

为什么要在关系上执行级联操作?

考虑以下模式:Tax Rate Schema

税率金额模型

// ...
class TaxRateAmount extends BaseModel
{
    //...

    /**
     * Return the tax rate relation.
     */
    public function taxRate(): BelongsTo
    {
        return $this->belongsTo(TaxRate::class);
    }

    /**
     * Return the tax class relation.
     */
    public function taxClass(): BelongsTo
    {
        return $this->belongsTo(TaxClass::class);
    }
}

税率模型

// ...
class TaxRate extends BaseModel
{
    //...
    /**
     * Return the tax zone relation.
     */
    public function taxZone(): BelongsTo
    {
        return $this->belongsTo(TaxZone::class);
    }

    /**
     * Return the tax rate amounts relation.
     */
    public function taxRateAmounts(): HasMany
    {
        return $this->hasMany(TaxRateAmount::class);
    }
}

在这种情况下,删除与TaxRateAmount关联的TaxRate会在数据库中引发外键约束错误。在这种情况下,应该使用DeleteCascadingActionDeleteCascadingBulkAction操作,并在每个上使用->relationship('taxRateAmounts')

当前支持的级联操作

目前支持以下级联操作

  • 删除:`DominionSolutions\FilamentCascadingActions\Actiouns\DeleteCascadingAction`
  • 批量删除:`DominionSolutions\FilamentCascadingActions\Tables\Actions\DeleteCascadingBulkAction`

关系方法

每个操作都公开了relationships()方法。目前默认操作是不遍历关系,有效地像它所包装的常规纤维操作一样操作。它接受一个字符串数组,包含你想要修改的名称和父记录的关系。

那么,级联数据库操作是什么?

在数据库的上下文中,“级联”指的是数据库的一部分中的更改如何影响其他相关部分的方式。具体来说,级联操作通常涉及插入、更新或删除数据等操作。

1. 级联插入

  • 假设你有两个表,我们可以称它们为表A和表B,它们之间存在关系。
  • 级联插入意味着当你向表A添加新记录时,表B中的相关记录将自动创建。这确保了两个表中的数据保持连接。

2. 级联更新

  • 假设你更改了表A中某个记录的特定字段的值。在级联更新中,与表A中更新记录相关联的表B中的相应记录也会自动更新,以反映更改。

3. 级联删除

  • 同样,当你删除表A中的记录时,级联删除确保表B中的相关记录也会被删除。这有助于维护数据完整性,防止在相关表中出现孤立的记录。

安装

您可以通过composer安装此包

composer require dominion-solutions/filament-cascading-actions

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="filament-cascading-actions-config"

这是发布配置文件的内容

return [
    return [
    'enable-cascading-actions' => true,
    'prompt-before-cascading' => true,
    'bulk-delete-action-name' => 'Delete',
];

使用

在纤维页面的标题操作中

protected function getHeaderActions(): array
{
    return [
        \DominionSolutions\FilamentCascadingActions\Actions\DeleteCascadingAction::make()
            ->relationships('taxRateAmounts'),
    ];
}

在表格上使用批量操作

public static function table(Table $table): Table
{
    return $table
        ->columns([
            // ...
        ])
        ->filters([
            // ...
        ])
        ->actions([
            // ...
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                DeleteCascadingBulkAction::make()->relationships('taxRateAmounts'),
            ]),
    ]);
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请查阅我们的安全策略以了解如何报告安全漏洞。

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。