laravel 8 passport数据类型不匹配



我将laravel更新到了版本8。

当我运行这个方法(使用migrate命令(时,我遇到了一个问题:

LaravelPassportPassport::client()->forceFill([
'user_id' => 1,
'name' => 'email@email.fr', <- edited
'secret' => IlluminateSupportStr::random(40),
'redirect' => '',
'personal_access_client' => false,
'password_client' => true,
'revoked' => false
])->save();

我有以下错误:

In Connection.php line 678:
SQLSTATE[42804]: Datatype mismatch: 7 ERREUR:  la colonne « personal_access_client » est de type boolean mais l'expression est de type integer
LINE 1: ...pdated_at", "created_at") values ($1, $2, $3, $4, $5, $6, $7...
^
HINT:  Vous devez réécrire l'expression ou lui appliquer une transformation de type. (SQL: insert into "oauth_clients" ("user_id", "name", "secret", "redirect", "personal_access_client", "password_client", "revoked", "updated_at", "created_at") values (1, email@email.fr, UjnSFdG1JdQxs7LPUDA3D1TACjAa5oNVbmWOCQmX, , 0, 1, 0, 2021-05-04 10:29:48, 2021-05-04 10:29:48) returning "id")

In Connection.php line 343:
SQLSTATE[42804]: Datatype mismatch: 7 ERREUR:  la colonne « personal_access_client » est de type boolean mais l'expression est de type integer
LINE 1: ...pdated_at", "created_at") values ($1, $2, $3, $4, $5, $6, $7...
^
HINT:  Vous devez réécrire l'expression ou lui appliquer une transformation de type.

"personal_access_client";数据库中的字段为布尔格式。

我删除了这些表,然后用passport重新创建,但我仍然有错误。

我想当我执行update((时,所有的布尔字段都不再工作。

你能帮我吗?

版本:

"php": "^7.4|^8.0",
"doctrine/dbal": "^3.1",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.0",
"laravel/helpers": "^1.4",
"laravel/passport": "^10.1",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"lcobucci/jwt": "^4.1",
"nesbot/carbon": "^2.4",
"pusher/pusher-php-server": "^5.0",
"spatie/laravel-permission": "^4.0",
"spatie/laravel-webhook-server": "^1.12",
"symfony/translation": "^5.2"

谢谢

由于缺少名称的右引号,您现在遇到了某种语法错误。用以下内容替换您的代码段,然后重试。

LaravelPassportPassport::client()->forceFill([
'user_id' => 1,
'name' => 'email@email.fr',
'secret' => IlluminateSupportStr::random(40),
'redirect' => '',
'personal_access_client' => false,
'password_client' => true,
'revoked' => false
])->save();

可能是因为您的MySQL服务器版本?

我建议尝试将true/false更改为1/0,看看它是否首先解决了问题

否则,您可以尝试直接添加到数据库(通过避免Passport方法(

DB::table('oauth_clients')->insert([
[
'user_id' => 1,
'name' => 'email@email.fr',
'secret' => IlluminateSupportStr::random(40),
'redirect' => '',
'personal_access_client' => 0,
'password_client' => 1,
'revoked' => 0
]
]);

这是因为php的版本。您的版本必须为7.4.18或8.0.5。

https://github.com/php/php-src/pull/6801

这是因为Laravel插入10来指示列的布尔性。但是,数据库使用truefalse来指示它。因此,它不起作用。有一个变通办法。

如果你是在新安装后第一次这样做,然后编辑具有该名称的迁移文件

2016_06_01_000003_create_oauth_refresh_tokens_table.php

现在,日期和时间部分可能在您的安装中不匹配,这很好。只需尝试查找create_oauth_refresh_tokens_table或负责创建oauth_clients表的迁移即可。从这些中编辑这3个值

$table->boolean('personal_access_client');
$table->boolean('password_client');
$table->boolean('revoked');

到这些

$table->unsignedTinyInteger('personal_access_client');
$table->unsignedTinyInteger('password_client');
$table->unsignedTinyInteger('revoked');

基本上,passport创建的任何一个表都具有boolean列类型,使其成为unsignedTinyInteger

相关内容

最新更新