2017-01-08 2 views
2

与えられた外部IDがユーザーによって所有されているかどうかを判断し、コレクションが見つかった場合はそれを返す良い方法はありますか?与えられた外部IDがユーザーによって所有されているかどうかを判断しますか?

私はこのようにやって、例えば、コントローラにされています:tokenRepoクラスで

public function showToken(Request $request) 
{ 
    $this->tokenRepo->ownToken($request->user(), $request->toke); 
} 

ownToken方法は次のようになります。

明示 trueまたは false値を返す
public function ownToken($user, $tokenId) 
{ 
    return $user->tokens()->where('id', $tokenId)->first(); 
} 

答えて

1

良い習慣です。また、現在ログインしているユーザーのトークンを確認する場合は、auth()->user()を使用できます。レポがモデルである場合例:

public function ownToken($tokenId) 
{ 
    return is_null($this->where('id', $tokenId) 
     ->where('user_id', auth()->user()->id)->first()); 
} 

または:

public function ownToken($tokenId) 
{ 
    return is_null(auth()->user()->tokens()->where('id', $tokenId)->first()); 
} 

次に、あなたがこれを行うことができるようになります:

if ($this->tokenRepo->ownToken($request->token)) { .... } 
+0

明示的な「真」または「偽」ではなく、コレクションが見つかるとどうしてですか?それは第二段階を減らすでしょう。 –

+0

このコレクションまたはオブジェクトを使用する場合は、もちろんそれを返す必要があります。しかし、トークンがユーザーに属しているかどうかをチェックしたいと思っていました。 –

1

あなたは、カウントのブール値を返すことができますゼロよりも大きいので、DBクエリの重みが小さくなります。

public function ownToken($user, $tokenId) 
{ 
    return !! $user->tokens()->where('id', $tokenId)->count() > 0; 
} 

first()count()がちょうどCOUNT(id)を行いますSELECT *、に変換されます。

関連する問題