当记录存在时,Laravel User Eloquent模型返回null

时间:2016-04-20 15:33:28

标签: php laravel twitter eloquent laravel-socialite

拔毛时间。

我已经为Laravel Socialite实施了回调。它针对Twitter用户ID运行User::where,但是尽管数据库中存在匹配的记录,但它始终返回null。

因此,它总是试图创建一个新用户,导致这种错误:

QueryException in Connection.php line 673: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...

这里是回调函数。 $twitterUser是来自Socialite的传入用户记录。我已尝试在函数中明确使用\App\User\,但无济于事。

private function findOrCreateUser( $twitterUser )
{
  $user = User::where( 'twitter_id', $twitterUser->id )->first();

  if ($user)
  {
    return $user;
  }

  return User::create([
    'name'        => $twitterUser->name,
    'handle'      => $twitterUser->nickname,
    'twitter_id'  => $twitterUser->id,
    'avatar'      => $twitterUser->avatar_original
  ]);
}

如果我在应用中的其他位置运行代码,则用户会显示正常,如果我尝试php artisan tinker后跟\App\User::where('twitter_id', 123456789)->first(),我会得到一个结果:

=> App\User {#663
 id: 3,
 name: "Steve Jones",
 handle: "SteveJonesGtr",
 twitter_id: 123456789,
 avatar: "http://pbs.twimg.com/profile_images/whatever/bC0RLl-3.jpeg",
 created_at: "2016-04-20 11:41:39",
 updated_at: "2016-04-20 11:41:39",

}

编辑:如果我将where子句更改为此,则可以:

$user = User::where( 'handle', $twitterUser->nickname )->first();

但是我无法理解为什么它不会为此返回结果:

$user = User::where( 'twitter_id', $twitterUser->id )->first();

有什么想法吗?

1 个答案:

答案 0 :(得分:-2)

您正在寻找12345678而不是123456789这就是您的问题所在。你错过了最后的9