当laravel不为空时更新记录?

时间:2017-08-10 13:28:35

标签: laravel laravel-5 laravel-socialite

我有这样的代码:

public function createOrGetUser(Provider $provider)
{
    $providerUser = $provider->user();
    $providerName = class_basename($provider);
    $token = $providerUser->token;
    $account = SocialAccount::whereProvider($providerName)
        ->whereProviderUserId($providerUser->getId())
        ->first();
    if ($account) {
        return $account->user;
    }else{
        $account = new SocialAccount([
            'provider_user_id' => $providerUser->getId(),
            'provider' => $providerName
        ]);
        $user = User::whereEmail($providerUser->getEmail())->first();
        if($user->first()) {
        if($providerName == "FacebookProvider") {
            $user->facebook_token = $token;
        }elseif($providerName == "TwitterProvider") {
            $user->twitter_token = $token;
        }else{
            $user->google_token = $token;
            }
        $user->save();
        }
        if (!$user) {
            $user = User::create([
                'email' => $providerUser->getEmail(),
                'name' => $providerUser->getName(),
                'avatar' => $providerUser->getAvatar(),
            ]);
        }
        $account->user()->associate($user);
        $account->save();
        return $user;
    }
}

唯一的问题是它从不运行$ providerName ==“facebookprovider”等检查并更新该用户的令牌。为什么会发生这种情况有什么特别的原因吗?

1 个答案:

答案 0 :(得分:0)

documentation上找到:

  

如果您只需要从数据库表中检索单行,那么   可以使用第一种方法。此方法将返回单个 StdClass   的对象

第一次调用first()时会得到stdClass对象。第二个可能永远不会是真的,因为这个类没有这个方法。

如果您按if ($user->first())更改if ($user),则可能会有效。