Skip to content

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

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()
...
"} 

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions