dominion-solutions / filament-cascading-actions
一个实现级联操作和批量操作的纤维包。
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
Suggests
- ext-pdo-sqlite: Required to run SQLite database tests.
- ext-sqlite3: Required to run SQLite database tests.
This package is auto-updated.
Last update: 2024-08-29 17:13:33 UTC
README
此包的作用是什么?
此包将级联数据库操作引入纤维,利用操作。有时你可能不想在数据库的外键关系上设置CASCADE
选项,也可能你并不完全拥有数据模式。此包填补了这一空白。级联操作可以作为批量操作、列表表上的操作,以及编辑页或表上的单个操作来包含。它本身不提供任何UI组件,而是使用它所包装的操作的UI元素(例如DeleteAction
)。
为什么要在关系上执行级联操作?
考虑以下模式:
税率金额模型
// ...
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
会在数据库中引发外键约束错误。在这种情况下,应该使用DeleteCascadingAction
和DeleteCascadingBulkAction
操作,并在每个上使用->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)。请参阅许可证文件以获取更多信息。