filamentphp / filament

A collection of beautiful full-stack components for Laravel. The perfect starting point for your next app. Using Livewire, Alpine.js and Tailwind CSS.
https://filamentphp.com
MIT License
16.12k stars 2.57k forks source link

array_diff(): Argument #2 must be of type array, int given #12996

Closed scottjo closed 1 month ago

scottjo commented 1 month ago

Package

filament/filament

Package Version

3.2.83

Laravel Version

11.9.1

Livewire Version

3.5.0

PHP Version

8.3.7

Problem description

Having composer updated from filament 3.2.78 to 3.2.83 my users are now getting an error when saving models getting the following error:

array_diff(): Argument #2 must be of type array, int given

Expected behavior

Editing and saving resources should work as expected. Rolling back the Filament version back to 3.2.78 it all works as expected

Steps to reproduce

Firstly create a category Secondly create a product - select a category from the select dropdown Save the product Error occurs

Reproduction repository

https://github.com/scottjo/genie.git

Relevant log output

[2024-05-29 12:59:17] local.ERROR: array_diff(): Argument #2 must be of type array, int given {"userId":1,"exception":"[object] (TypeError(code: 0): array_diff(): Argument #2 must be of type array, int given at /Users/jon/Herd/genie/vendor/filament/forms/src/Components/Select.php:994)
[stacktrace]
#0 /Users/jon/Herd/genie/vendor/filament/forms/src/Components/Select.php(994): array_diff(Array, 1)
#1 /Users/jon/Herd/genie/vendor/filament/support/src/Concerns/EvaluatesClosures.php(35): Filament\\Forms\\Components\\Select::Filament\\Forms\\Components\\{closure}(Object(App\\Filament\\Fields\\CategoryIDSelectField), Object(App\\Models\\Product), 1)
#2 /Users/jon/Herd/genie/vendor/filament/forms/src/Components/Concerns/BelongsToModel.php(49): Filament\\Support\\Components\\Component->evaluate(Object(Closure))
#3 /Users/jon/Herd/genie/vendor/filament/forms/src/Concerns/BelongsToModel.php(33): Filament\\Forms\\Components\\Component->saveRelationships()
#4 /Users/jon/Herd/genie/vendor/filament/forms/src/Concerns/HasState.php(232): Filament\\Forms\\ComponentContainer->saveRelationships()
#5 /Users/jon/Herd/genie/vendor/filament/filament/src/Resources/Pages/EditRecord.php(143): Filament\\Forms\\ComponentContainer->getState(true, Object(Closure))
#6 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Filament\\Resources\\Pages\\EditRecord->save(true, true)
#7 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#8 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#9 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#10 /Users/jon/Herd/genie/vendor/livewire/livewire/src/Wrapped.php(23): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array)
#11 /Users/jon/Herd/genie/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(474): Livewire\\Wrapped->__call('save', Array)
#12 /Users/jon/Herd/genie/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(101): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->callMethods(Object(App\\Filament\\Resources\\ProductResource\\Pages\\EditProduct), Array, Object(Livewire\\Mechanisms\\HandleComponents\\ComponentContext))
#13 /Users/jon/Herd/genie/vendor/livewire/livewire/src/LivewireManager.php(97): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->update(Array, Array, Array)
#14 /Users/jon/Herd/genie/vendor/livewire/livewire/src/Mechanisms/HandleRequests/HandleRequests.php(93): Livewire\\LivewireManager->update(Array, Array, Array)
#15 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Livewire\\Mechanisms\\HandleRequests\\HandleRequests->handleUpdate()
#16 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Livewire\\Mechanisms\\HandleRequests\\HandleRequests), 'handleUpdate')
#17 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Route.php(206): Illuminate\\Routing\\Route->runController()
#18 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#19 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
#28 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#35 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#36 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#37 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#38 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#39 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#40 /Users/jon/Herd/genie/vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#44 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#45 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#46 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#47 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#50 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#51 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#52 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#53 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#56 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#57 /Users/jon/Herd/genie/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1176): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#58 /Users/jon/Herd/genie/public/index.php(17): Illuminate\\Foundation\\Application->handleRequest(Object(Illuminate\\Http\\Request))
#59 /Applications/Herd.app/Contents/Resources/valet/server.php(153): require('/Users/jon/Herd...')
#60 {main}
"}
danharrin commented 1 month ago

Could you please try and reproduce this in a new repository? I see theres quite a lot of code in the existing one that is not related and I think there might be something weird in the setup that might be causing this. While you're reproducing from scratch, its quite likely that you'll find what might be wrong to provide more detailed information.

danharrin commented 1 month ago

For example, you're currently using a BelongsToMany relationship, but your Select doesn't have multiple()? I guess that's where the issue lies and I didn't account for that when I made the change. Not seen anyone do that before to be honest

scottjo commented 1 month ago

HIya Dan - that seems to be the issue - by adding multiple() to the select field it works a treat. Thats my issue - at present the users want to have a single 'category' for a product but in the short to medium term they are going to move to the products belonging to more than one category. This worked in 3.2.78 but no longer in 3.2.83. I don't really want to go through my production code base removing those many-to-many relationships

(thanks for your help and for a great great product)

danharrin commented 1 month ago

It should be a simple fix, I will work on it probably tomorrow and get a fix out

danharrin commented 1 month ago

If you want to speed up the process, look on line 999 of Select.php and wrap that line in an Arr::wrap() function call, and PR it in so I can quickly merge. If you do that I can squeeze it into todays release

scottjo commented 1 month ago

Sorry Dan - away from my machine for the rest of the day. Thanks again for your help.JonSent from my iPhoneOn 29 May 2024, at 15:30, Dan Harrin @.***> wrote: If you want to speed up the process, look on line 999 of Select.php and wrap that line in an Arr::wrap() function call, and PR it in so I can quickly merge. If you do that I can squeeze it into todays release

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

danharrin commented 1 month ago

Fixed by #13010