此文档中Laravel Inserting Related Model 没有方法来更新当前相关模型。 看一看: Relation Between two Models
private function UserToken($token,$expire,$user_id){
if($JetUserPass=JetUserPass::find($user_id)->token){
$JetT = new JetTokens(['id_token' =>$token,'expires_on'=>$expire]);
$JetUserPass2=JetUserPass::find($user_id);
$JetUserPass2->token()->save($JetT);//NOT WORKING
}else{
$JetT = new JetTokens(['id_token' =>$token,'expires_on'=>$expire]);
$JetUserPass=JetUserPass::find($user_id);
$JetUserPass->token()->save($JetT);
}
}
可能的错误:完整性违规......
这里是if if它正在检查用户是否存在令牌,如果为true则会更新现有令牌,否则它将创建新的令牌。 我想从JetUserPass模型更新JetTokens模型,如何更新相关模型?
答案 0 :(得分:0)
由于您未提供错误消息,我将无法正确帮助您。但是在同一文档页面上还有另一种名为create
的方法。它说:
除了save和saveMany方法之外,您还可以使用 create方法,接受一组属性,创建一个模型, 并将其插入数据库。再次,保存之间的区别 而create是save接受一个完整的Eloquent模型实例 create接受一个普通的PHP数组:
所以,要回答你的解决方案,你可以这样做:
private function UserToken($token, $expire, $user_id)
{
$jetUserPass = JetUserPass::find($user_id);
$insertValues = [
'id_token' => $token,
'expires_on' => $expire
];
// Since you have same code, I have replaced it
// in a single line following the principle of DRY.
// Read the link below.
$jetUserPass->token()->create($insertValues);
}
只是旁注:
您的代码违反了DRY的原则。这是因为,除了if
和else
属性之外,您方法的JetUserPass
和JetUserPass2
块具有相同的代码。在任何情况下都应该避免这种情况。
希望这会帮助你。快乐的编码。欢呼声。