Laravel Filament 中 mutateFormDataBeforeCreate 方法无法获取关联数据(Repeater)的解决办法

Laravel Filament 中在新增页面可以通过mutateFormDataBeforeCreate在表

Laravel Filament 中在新增页面可以通过mutateFormDataBeforeCreate在表单保存前修改数据,但是在实际过程中发现,该方法默认无法获取表单中通过Repeater组件设置的关联数据,只能获取基础的表单数据。

protected function mutateFormDataBeforeCreate($data): array
{
    dd($data);
}

比如我创建了一个订单表单,其中购买物品为一对多关联数据,通过Repeater组件设置。这里只能输出订单的基础数据,不包括Repeater组件中的物品数据。

解决办法是给Repeater组件设置:dehydrated()属性,再次打印数据,即可包含关联数据了。

Repeater::make('outboundMedicines')
    ->relationship()
    ->schema([
        FormsComponentsSelect::make('medicine_id')
            ->label('药品')
            ->options(Medicine::options())
            ->required()
            ->distinct()
            ->disableOptionsWhenSelectedInSiblingRepeaterItems()
            ->searchable()
    ])
    ->dehydrated()