1

在本文档Laravel Inserting Related Model 中,没有更新当前相关模型的方法。看看: 两个模型之间的关系

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 块中,它正在检查用户的令牌是否存在,如果为真,那么它将更新现有的,否则它将创建新的。我想从 JetUserPass 模型更新 JetTokens 模型,即如何更新相关模型?

4

1 回答 1

0

由于您没有提供错误消息,我将无法为您提供适当的帮助。但是create在同一文档页面上调用了另一种方法。它说:

除了 save 和 saveMany 方法之外,您还可以使用 create 方法,它接受属性数组,创建模型并将其插入数据库。同样,save 和 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的原则。这是因为,您的方法ifelse块除了JetUserPassJetUserPass2属性外具有相同的代码。在任何情况下都应该避免这种情况。

希望这可以帮助你。快乐编码。干杯。

于 2015-12-27T07:16:27.730 回答