Php 如何在Laravel中更新相关模型

Php 如何在Laravel中更新相关模型,php,laravel-5,laravel-5.2,Php,Laravel 5,Laravel 5.2,在此文档中 没有更新当前相关模型的方法。 看看: 可能的错误:完整性冲突 在if块中,它检查用户是否有令牌,如果为true,它将更新现有令牌,否则将创建新令牌我想从JetUserPass模型更新JetTokens模型即如何更新相关模型 由于您没有提供错误消息,我将无法正确帮助您。但是,在同一文档页面上还有另一个名为create的方法。它说: 除了save和saveMany方法外,还可以使用 create方法接受一组属性,创建一个模型, 并将其插入数据库。再次强调一下,save和save之间的区

在此文档中 没有更新当前相关模型的方法。 看看:

可能的错误:完整性冲突


在if块中,它检查用户是否有令牌,如果为true,它将更新现有令牌,否则将创建新令牌我想从JetUserPass模型更新JetTokens模型即如何更新相关模型

由于您没有提供错误消息,我将无法正确帮助您。但是,在同一文档页面上还有另一个名为
create
的方法。它说:

除了save和saveMany方法外,还可以使用 create方法接受一组属性,创建一个模型, 并将其插入数据库。再次强调一下,save和save之间的区别 创建时save接受一个完整的雄辩的模型实例 创建一个普通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);
}
只是一个旁注:

您的代码违反了的原则。这是因为,您的方法的
if
else
块除了
JetUserPass
JetUserPass2
属性外,都具有相同的代码。在任何情况下都应该避免这种情况


希望这对你有所帮助。快乐编码。干杯。

由于您没有提供错误消息,我将无法正确帮助您。但是,在同一文档页面上还有另一个名为
create
的方法。它说:

除了save和saveMany方法外,还可以使用 create方法接受一组属性,创建一个模型, 并将其插入数据库。再次强调一下,save和save之间的区别 创建时save接受一个完整的雄辩的模型实例 创建一个普通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);
}
只是一个旁注:

您的代码违反了的原则。这是因为,您的方法的
if
else
块除了
JetUserPass
JetUserPass2
属性外,都具有相同的代码。在任何情况下都应该避免这种情况


希望这对你有所帮助。快乐编码。干杯。

@mrun如果不起作用,请正确阅读文档。看起来您正在寻找Eloquent的
updateOrCreate()
方法。另外,请尝试遵循命名的约定:方法应该是驼峰式的(
userToken
而不是
userToken
),最好返回相关模型以方便方法链接,或者只是为了能够在应用程序中进一步使用更新的/新创建的
JetUserPass
实例。@MartinBean在这里,我尝试通过许多不同的方法来解决这个问题,但我的问题是如何通过相关模型来更新模型,例如:“令牌属于用户”。我们可以通过使用用户模型来保存令牌,方法是在用户模型中调用函数“$jetUserPass->token()”token函数:
public function token(){return$this->hasOne('App\JetTokens','jetuserinfo_id');}
,在这个函数save()上工作正常,但我想更新现有记录。:)@mrun如果不起作用,请正确阅读文档。看起来您正在寻找Eloquent的
updateOrCreate()
方法。另外,请尝试遵循命名的约定:方法应该是驼峰式的(
userToken
而不是
userToken
),最好返回相关模型以方便方法链接,或者只是为了能够在应用程序中进一步使用更新的/新创建的
JetUserPass
实例。@MartinBean在这里,我尝试通过许多不同的方法来解决这个问题,但我的问题是如何通过相关模型来更新模型,例如:“令牌属于用户”。我们可以通过使用用户模型来保存令牌,方法是在用户模型中调用函数“$jetUserPass->token()”token函数:
public function token(){return$this->hasOne('App\JetTokens','jetuserinfo_id');}
,在这个函数save()上工作正常,但我想更新现有记录。:)代码中没有重复,很抱歉,您没有得到逻辑,我将向您简要介绍发生的情况–在if块中,它检查用户是否有令牌,如果为true,它将更新现有令牌,否则它将创建新令牌。我知道如何保存新的但不知道如何更新相关的模型代码中没有重复,很抱歉,您没有逻辑,发生了什么,我将向您简要介绍-在if块中,它检查用户是否存在令牌,如果为true,它将更新现有的令牌,否则它将创建新的令牌。我知道如何保存新模型,但不知道如何更新相关模型