如何在Laravel中更新相关模型

时间:2015-12-27 06:00:40

标签: php laravel-5 laravel-5.2

此文档中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模型,如何更新相关模型?

1 个答案:

答案 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的原则。这是因为,除了ifelse属性之外,您方法的JetUserPassJetUserPass2块具有相同的代码。在任何情况下都应该避免这种情况。

希望这会帮助你。快乐的编码。欢呼声。