CRUD
CRUD copied to clipboard
[Bug] Form Operation - cannot add raw fields of a morph as hidden fields
Bug report
What I did
Created a "form operation"
php artisan backpack:crud-form-operation Storn
the model as a coinable MorphTo relation.
so the table has coinable_id and coinable_type
this because the operation is loading into crud currentEntry a record I want to manipulate,
I want to add as hidden fileds these 2 fields
$this->crud->addField([
'type' => 'hidden',
'name' => 'coinable_id',
'value' => $this->crud->getCurrentEntry()->coinable->id,
]);
$this->crud->addField([
'type' => 'hidden',
'name' => 'coinable_type',
'value' => $this->crud->getCurrentEntry()->coinable_type,
]);
What I expected to happen
I expeteced 2 hidden fields; coinable_id and coinable_type
What happened
What I've already tried to fix it
nothing for now
Is it a bug in the latest version of Backpack?
After I run composer update backpack/crud the bug... is it still there?
yes
Backpack, Laravel, PHP, DB version
When I run php artisan backpack:version the output is:
### PHP VERSION:
PHP 8.2.8 (cli) (built: Jul 4 2023 15:53:15) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies
### LARAVEL VERSION:
10.20.0.0
### BACKPACK PACKAGE VERSIONS:
backpack/basset: 1.1.1
backpack/crud: 6.1.15
backpack/generators: v4.0.2
backpack/pro: 2.0.11
backpack/theme-tabler: 1.0.12
Hey @realtebo it's usually better to post the full error stack trace to help us to trace/reproduce the error.
From that SS I can't tell where/why the error is triggered.
I may throw my guess here, that if the problem is some entity conflict, you can try entity => false in your fields.
Cheers
[2023-08-25 11:25:21] local.ERROR: Call to undefined method App\Models\CoinMovement::coinable_id() {"userId":195,"exception":"[object] (BadMethodCallException(code: 0): Call to undefined method App\Models\CoinMovement::coinable_id() at C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:67) [stacktrace] #0 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php(36): Illuminate\Database\Eloquent\Model::throwBadMethodCallException('coinable_id') #1 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(2333): Illuminate\Database\Eloquent\Model->forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), 'coinable_id', Array) #2 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Library\CrudPanel\Traits\MorphRelationships.php(54): Illuminate\Database\Eloquent\Model->__call('coinable_id', Array) #3 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Library\CrudPanel\Traits\MorphRelationships.php(68): Backpack\CRUD\app\Library\CrudPanel\CrudPanel->getMorphToFieldNames('coinable_id') #4 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Library\CrudPanel\Traits\Fields.php(57): Backpack\CRUD\app\Library\CrudPanel\CrudPanel->makeSureMorphSubfieldsAreDefined(Array) #5 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Library\CrudPanel\Traits\Fields.php(109): Backpack\CRUD\app\Library\CrudPanel\CrudPanel->makeSureFieldHasNecessaryAttributes(Array) #6 C:\laragon\www\project-coin\app\Http\Controllers\Teacher\Operations\StornMovementOperation.php(130): Backpack\CRUD\app\Library\CrudPanel\CrudPanel->addField(Array) #7 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): App\Http\Controllers\Teacher\CoinMovementCrudController->getStornMovementForm(6) #8 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction('getstornMovemen...', Array) #9 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(259): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Teacher\CoinMovementCrudController), 'getstornMovemen...') #10 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Route.php(205): Illuminate\Routing\Route->runController() #11 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(799): Illuminate\Routing\Route->run() #12 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) #13 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Http\Controllers\CrudController.php(43): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #14 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(162): Backpack\CRUD\app\Http\Controllers\CrudController->Backpack\CRUD\app\Http\Controllers\{closure}(Object(Illuminate\Http\Request), Object(Closure)) #15 C:\laragon\www\project-coin\app\Http\Middleware\PasswordMustBeChanged.php(43): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #16 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): App\Http\Middleware\PasswordMustBeChanged->handle(Object(Illuminate\Http\Request), Object(Closure)) #17 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authorize.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #18 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Auth\Middleware\Authorize->handle(Object(Illuminate\Http\Request), Object(Closure), 'access-teacher-...') #19 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #20 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure)) #21 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure)) #22 C:\laragon\www\project-coin\app\Http\Middleware\CheckIfAdmin.php(66): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #23 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): App\Http\Middleware\CheckIfAdmin->handle(Object(Illuminate\Http\Request), Object(Closure)) #24 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #25 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure)) #26 C:\laragon\www\project-coin\vendor\backpack\crud\src\app\Http\Middleware\AuthenticateSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #27 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Backpack\CRUD\app\Http\Middleware\AuthenticateSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #28 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #29 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) #30 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #31 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #32 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #33 C:\laragon\www\project-coin\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)) #34 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #35 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #36 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) #37 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #38 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) #39 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #40 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(798): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #41 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(777): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request)) #42 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(741): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route)) #43 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(730): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #44 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(200): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #45 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request)) #46 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #47 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure)) #48 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure)) #49 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #50 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure)) #51 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure)) #52 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #53 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure)) #54 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #55 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure)) #56 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Http\Middleware\HandleCors.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #57 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure)) #58 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #59 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure)) #60 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #61 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(175): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #62 C:\laragon\www\project-coin\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(144): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #63 C:\laragon\www\project-coin\public\index.php(51): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #64 {main} "}
Thanks, does the entity => false in your fields solves the problem ?
Also, there is an easy way to share the strack trace here:
You can select what to share, usually the basic call trace like you posted there is enough, but it's easier to read and it's not a huuuuuge comment in the middle of a discussion. 👍