Skip to content

Relation field bug in Matrix column for 1:M relation #3040

@ShamanKing19

Description

@ShamanKing19

Мой случай обнаружения ошибки

Я создал поле с типом Matrix, а в нём сделал колонку с полем Relation

Matrix::make('prices')
    ->columns([
        'Магазин' => 'shop_id',
        'Количество' => 'quantity',
        'Цена' => 'price',
        'Валюта' => 'currency',
        'Описание' => 'description',
        'Дата изменения' => 'updated_at'
    ])
    ->fields([
        'shop_id' => Relation::make()->fromModel(Shop::class, 'name', 'id'),
        'quantity' => Input::make()->type('number')->min(1),
        'price' => Input::make()->type('number')->min(0),
        'currency' => Input::make()->type('text'),
        'description' => Input::make()->type('text'),
        'updated_at' => DateTimer::make()->disabled()
    ])
    ->value($this->offer?->prices)

При открытии страницы вижу ошибку

SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type bigint: "" CONTEXT: unnamed portal parameter $1 = '' (Connection: pgsql, SQL: select * from "shops" where "id" in ())". 

Причина

Суть в том, что Matrix пытается сразу получить значение по-умолчанию для новой строки, которую мы создадим через кнопку "Добавить строку", но в качестве значения передаётся пустая строка "".

Решение

Источник проблемы находится в шаблоне resources/views/partials/fields/matrixRow.blade.php в строке 7:
Image

Т. к. моё поле - Relation, оно ожидает либо число либо null, а получает пустую строку и пытается передать её как параметр запроса для получения значения из таблицы, на которую смотрит Relation.

Логи

Вот такое обнаружил в логах:

SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: ""
CONTEXT:  unnamed portal parameter $1 = '' (Connection: pgsql, SQL: select * from "shops" where "id" in ()) (View: /var/www/html/backend/platform/resources/views/partials/fields/matrixRow.blade.php) (View: /var/www/html/backend/platform/resources/views/partials/fields/matrixRow.blade.php) {"userId":1,"exception":"[object] (Illuminate\\View\\ViewException(code: 0): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: \"\"
CONTEXT:  unnamed portal parameter $1 = '' (Connection: pgsql, SQL: select * from \"shops\" where \"id\" in ()) (View: /var/www/html/backend/platform/resources/views/partials/fields/matrixRow.blade.php) (View: /var/www/html/backend/platform/resources/views/partials/fields/matrixRow.blade.php) at /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(59): Illuminate\\View\\Engines\\CompilerEngine->handleViewException(Object(Illuminate\\View\\ViewException), 0)
#1 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(76): Illuminate\\View\\Engines\\PhpEngine->evaluatePath('/var/www/html/b...', Array)
#2 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/View.php(208): Illuminate\\View\\Engines\\CompilerEngine->get('/var/www/html/b...', Array)
...

[previous exception] [object] (Illuminate\\View\\ViewException(code: 0): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: \"\"
CONTEXT:  unnamed portal parameter $1 = '' (Connection: pgsql, SQL: select * from \"shops\" where \"id\" in ()) (View: /var/www/html/backend/platform/resources/views/partials/fields/matrixRow.blade.php) at /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(59): Illuminate\\View\\Engines\\CompilerEngine->handleViewException(Object(Illuminate\\Database\\QueryException), 1)
#1 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(76): Illuminate\\View\\Engines\\PhpEngine->evaluatePath('/var/www/html/b...', Array)
#2 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/View.php(208): Illuminate\\View\\Engines\\CompilerEngine->get('/var/www/html/b...', Array)
#3 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/View.php(191): Illuminate\\View\\View->getContents()
#4 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/View/View.php(160): Illuminate\\View\\View->renderContents()
...


[previous exception] [object] (Illuminate\\Database\\QueryException(code: 22P02): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: \"\"
CONTEXT:  unnamed portal parameter $1 = '' (Connection: pgsql, SQL: select * from \"shops\" where \"id\" in ()) at /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(778): Illuminate\\Database\\Connection->runQueryCallback('select * from \"...', Array, Object(Closure))
#1 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(397): Illuminate\\Database\\Connection->run('select * from \"...', Array, Object(Closure))
#2 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3188): Illuminate\\Database\\Connection->select('select * from \"...', Array, true)
#3 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3173): Illuminate\\Database\\Query\\Builder->runSelect()
#4 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3763): Illuminate\\Database\\Query\\Builder->{closure:Illuminate\\Database\\Query\\Builder::get():3172}()
#5 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3172): Illuminate\\Database\\Query\\Builder->onceWithColumns(Array, Object(Closure))
#6 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(887): Illuminate\\Database\\Query\\Builder->get(Array)
#7 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(869): Illuminate\\Database\\Eloquent\\Builder->getModels(Array)
#8 /var/www/html/backend/platform/src/Screen/Fields/Relation.php(116): Illuminate\\Database\\Eloquent\\Builder->get()
#9 [internal function]: Orchid\\Screen\\Fields\\Relation->{closure:Orchid\\Screen\\Fields\\Relation::fromModel():101}()
#10 /var/www/html/backend/platform/src/Screen/Field.php(518): Closure->call(Object(Orchid\\Screen\\Fields\\Relation))
#11 /var/www/html/backend/platform/src/Screen/Field.php(215): Orchid\\Screen\\Field->runBeforeRender()
#12 /var/www/html/backend/platform/src/Screen/Field.php(544): Orchid\\Screen\\Field->render()
...

[previous exception] [object] (PDOException(code: 22P02): SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: \"\"
CONTEXT:  unnamed portal parameter $1 = '' at /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php:411)
[stacktrace]
#0 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(411): PDOStatement->execute()
#1 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(811): Illuminate\\Database\\Connection->{closure:Illuminate\\Database\\Connection::select():397}('select * from \"...', Array)
#2 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(778): Illuminate\\Database\\Connection->runQueryCallback('select * from \"...', Array, Object(Closure))
#3 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(397): Illuminate\\Database\\Connection->run('select * from \"...', Array, Object(Closure))
#4 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3188): Illuminate\\Database\\Connection->select('select * from \"...', Array, true)
#5 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3173): Illuminate\\Database\\Query\\Builder->runSelect()
#6 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3763): Illuminate\\Database\\Query\\Builder->{closure:Illuminate\\Database\\Query\\Builder::get():3172}()
#7 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3172): Illuminate\\Database\\Query\\Builder->onceWithColumns(Array, Object(Closure))
#8 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(887): Illuminate\\Database\\Query\\Builder->get(Array)
#9 /var/www/html/backend/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(869): Illuminate\\Database\\Eloquent\\Builder->getModels(Array)
#10 /var/www/html/backend/platform/src/Screen/Fields/Relation.php(116): Illuminate\\Database\\Eloquent\\Builder->get()
#11 [internal function]: Orchid\\Screen\\Fields\\Relation->{closure:Orchid\\Screen\\Fields\\Relation::fromModel():101}()
#12 /var/www/html/backend/platform/src/Screen/Field.php(518): Closure->call(Object(Orchid\\Screen\\Fields\\Relation))
#13 /var/www/html/backend/platform/src/Screen/Field.php(215): Orchid\\Screen\\Field->runBeforeRender()
#14 /var/www/html/backend/platform/src/Screen/Field.php(544): Orchid\\Screen\\Field->render()
#15 /var/www/html/backend/storage/framework/views/0d32b72cd94ea15178339ff59a6ccd59.php(9): Orchid\\Screen\\Field->__toString()
...
"} 

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions