2017-01-08 2 views
2

Что такое хороший подход, чтобы определить, принадлежит ли данный иностранный идентификатор пользователю и возвратить его, если он найден?Укажите, принадлежит ли данный иностранный идентификатор пользователю?

Я делал, как это, например, в контроллере:

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

В классе tokenRepo, то ownToken метод выглядеть следующим образом:

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

ответ

1

Возвращение явного true или false значение является хорошей практикой. Также, если вы проверяете токен для текущего пользователя, вы можете использовать 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

Вы можете вернуть логическое значение подсчета больше нуля, что уменьшит вес запроса БД.

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

first() переведет SELECT *, где count() будет просто сделать COUNT(id).

Смежные вопросы