Мне нужно изменить запрос Laravel по умолчанию с Auth::attempt()
.
В документах я увидел два пути:
Auth::attempt()
;User provider
.Первое решение у меня не работает, потому что мне нужно добавить предложение OR
в запрос (SELECT * FROM users WHERE email=? OR phone=?
), а не предложение AND
.
Второе решение должно быть правильным, но очень сложным, так как мне нужен только метод retrieveByCredentials
.
Есть ли другой способ сделать это?
Не уверен, что это задокументировано, но вы можете сделать следующее:
$givenField = '123456';
Auth::attempt([
'email' => function ($query) use ($givenField) {
$query->where('email', $givenField)
->orWhere('phone', $givenField)->from('users')->select('email');
]);
Это немного хакерски. Обычно это позволяет вам запрашивать другие таблицы, но здесь это то же самое.