我将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
1
或0
来指示列的布尔性。但是,数据库使用true
或false
来指示它。因此,它不起作用。有一个变通办法。
如果你是在新安装后第一次这样做,然后编辑具有该名称的迁移文件
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