それが使われるのは\Illuminate\Auth\EloquentUserProvider::retrieveByCredentials
ですが、処理が以下のようになっていて$query->where($key, $value);
の形で条件を設定するだけなので、このままでは=
の条件でしか設定できません。
php
1 456
7 public function retrieveByCredentials(array $credentials)
8 {
9 if (empty($credentials) ||
10 (count($credentials) === 1 &&
11 array_key_exists('password', $credentials))) {
12 return;
13 }
14
15 // First we will add each credential element to the query as a where clause.
16 // Then we can execute the query and, if we found a user, return it in a
17 // Eloquent User "model" that will be utilized by the Guard instances.
18 $query = $this->createModel()->newQuery();
19
20 foreach ($credentials as $key => $value) {
21 if (! Str::contains($key, 'password')) {
22 $query->where($key, $value); // ←この部分
23 }
24 }
25
26 return $query->first();
27 }
28
従って、EloquentUserProviderをもとにカスタムユーザープロバイダを作成してそれを使うようにするのが正攻法だと思います。EloquentUserProviderを継承したクラスでretrieveByCredentialsを置き換えるぐらいで作成できるでしょう。
また、他の部分にも影響するのでここだけの問題ではなくなりますが、start_date
についての条件をグローバルスコープで設定してしまう方法もあると思います。