filament
filament copied to clipboard
Nesting repeaters for BelongsToMany relationships
Package
filament/filament
Package Version
v3.2
Laravel Version
v11.9
Livewire Version
v3.5
PHP Version
PHP 8.3
Problem description
Following the example of using a repeater to fill BelongsToMany relationships [https://filamentphp.com/docs/3.x/forms/fields/repeater], I want to nest two repeaters with BelongsToMany relationships to handle a scenario like this:
I have Orders that have Products, which in turn have Colors.
I'm encountering a bug during the initial save: the color is not saved correctly because the order_product_id column in the color_order_product table is null. However, if I add new colors to a product in the order afterward, the modification is saved correctly.
But if I add a new product, the same issue arises.
Repeater::make('order_product')
->relationship('orderProducts')
->schema([
Select::make('product_id')
->relationship('product', 'title')
->required()
->live(),
Repeater::make('colorOrderProducts')
->relationship('colorOrderProducts')
->schema([
Select::make('color_id')
->options(
function ($get) {
$selectedProduct = Product::find($get('../../product_id'));
if ($selectedProduct) {
return $selectedProduct->colors()->get()->pluck('title', 'id');
}
}
)
->required(),
])
])
Expected behavior
When creating an order, adding products, and assigning colors to those products using the nested repeater, all entries should be saved correctly.
Steps to reproduce
-
Create an order with products and assign colors to those products using the nested repeater.
-
Save the order.
-
Check the color_order_product table and observe that the order_product_id column is null for the initially added colors.
-
Add new colors to the existing product and save again. Observe that these new colors are saved correctly.
-
Add a new product to the order and assign colors. Save and observe the issue reoccurs.
Reproduction repository
https://github.com/marc31/filament-nested-repeater-w-relationship
Relevant log output
No response
Donate 💰 to fund this issue
- You can donate funding to this issue. We receive the money once the issue is completed & confirmed by you.
- 100% of the funding will be distributed between the Filament core team to run all aspects of the project.
- Thank you in advance for helping us make maintenance sustainable!