脱毛タイム。
Laravel Socialite のコールバックを実装しました。User::where
Twitter ユーザー ID に対して実行されていますが、データベースに一致するレコードがあるにもかかわらず、常に 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();
何か案は?