Filament 在编辑页面隐藏关联关联管理器(Relation Manager)的方法

Filament 中的关联管理器(Relation Manager)是一项很棒的功能,可用于显示来自 Eloquent 关系的数据。但是,如果您只想在“查看”页面上显示关联管理器而不在“编辑”页面上显示关联管理器,该怎么办?

想象一个场景:我们有一个项目资源,并且只想在查看页面上显示该项目关联的交易记录,而编辑页面不显示关联记录。

方法 1:在编辑页面中删除关联管理器

当您在资源中注册关联管理器时,它们默认会显示在编辑和查看页面中。

class ItemResource extends Resource
{
    // ..
 
    public static function getRelations(): array
    {
        return [
            ItemResourceRelationManagersTransactionsRelationManager::class,
        ];
    }
 
    // ...
}

在编辑页面类上的 getRelationManagers() 方法返回一个空数组,即可从编辑页面中删除关联管理器。

class EditItem extends EditRecord
{
    // ...
 
    public function getRelationManagers(): array
    {
        return [];
    }
}

方法 2:在页面上添加,而不是在资源上添加关联管理器

仅在查看页面上显示关联管理器的另一种方法是将其注册在页面类上而不是资源上。管理器可以在指定的页面如:查看页面上注册,以便仅在该页面上显示关系管理器。

在查看页面类上:

use AppFilamentResourcesItemResourceRelationManagersTransactionsRelationManager;
 
class ViewItem extends ViewRecord
{
    protected static string $resource = ItemResource::class;
 
    public function getRelationManagers(): array
    {
        return [
            TransactionsRelationManager::class,
        ];
    }
 
    // ...
}

或者在列表页面类中:

use AppFilamentResourcesItemResourceRelationManagersTransactionsRelationManager;
 
class ListItems extends ListRecords
{
    // ...
 
    public function getRelationManagers(): array
    {
        return [
            TransactionsRelationManager::class,
        ];
    }
}