我使用的是 Laravel 5.5。我已经准备好数据库,并且有 2 个表。 1) users
2) users_auth_tokens
目前 users
表中没有填写任何数据。
所以,我的要求是任何第三个用户第一次调用 api 来获取 Android 设备的 refreshToken
,我将插入数据('auth_token'
, '调用时将刷新_token'
、'token_validity'
)写入到users_auth_tokens
表中。有一个字段 user_id
我想在第一次 api 调用时插入 '0'
,当任何用户登录后调用 api 时,我想更新相同的记录(即user_id=0
)与登录的user_id
。
但不幸的是,当我尝试使用 user_id=0
插入记录时,它给了我这样的错误:
"SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
tracker
.users_auth_tokens
, CONSTRAINTusers_auth_tokens_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
) ON DELETE CASCADE) (SQL: insert intousers_auth_tokens
(auth_token
,validity
,refresh_token
,updated_at
,created_at
) values (ETZEI11RY3D7RQE4XR6OBTNQHC6Q1ND187E5FD3E45281D3385D784C3D89C0697D46DDC, 1524135471, b87c88fdcf1eea0a6680620d8da77e4f0ee18b78, 2018-04-19 10:52:51, 2018-04-19 10:52:51))"
我知道为什么会出现这个错误,因为users_auth_tokens
中有外键user_id
,而users
表中目前没有任何记录!我尝试过使用迁移中的默认 0 值并使其也可为空,但没有运气。
无论如何,我想在该表中插入user_id=0
。我在谷歌上搜索了一些技巧,但没有人提供帮助。
我的代码是这样的:
$usersAuthTokens = new UsersAuthTokens;
$usersAuthTokens->auth_token = $authToken;
$usersAuthTokens->validity = $time;
$usersAuthTokens->refresh_token = $newRefreshToken;
$usersAuthTokens->user_id = 0; //error is here..because no record in users table right now
$usersAuthTokens->save();
有人有办法解决这个问题吗?任何帮助将不胜感激!!
谢谢。
最佳答案
我已通过保存 null
user_id 修复了该问题,但未使用 0
修复了该问题。
我需要在迁移文件中创建->nullable()
,并且当我保存记录时,我还需要保存null
值!
我尝试保存 user_id=0
但没有成功,我已使用 null
值修复了它!
感谢您的帮助@JonasStaudenmeir!
希望这对将来遇到同样问题的其他用户有所帮助!
关于php - Laravel:SQLSTATE [23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49919636/