add: phonetic soundex email and username searching

This commit is contained in:
Roardom
2024-05-01 01:28:33 +00:00
parent 3762d6eb11
commit 7054324306
2 changed files with 42 additions and 0 deletions
+18
View File
@@ -39,9 +39,15 @@ class UserSearch extends Component
#[Url(history: true)]
public string $username = '';
#[Url(history: true)]
public string $soundexUsername = '';
#[Url(history: true)]
public string $email = '';
#[Url(history: true)]
public string $soundexEmail = '';
#[Url(history: true)]
public string $rsskey = '';
@@ -81,7 +87,19 @@ class UserSearch extends Component
return User::query()
->with('group')
->when($this->username !== '', fn ($query) => $query->where('username', 'LIKE', '%'.$this->username.'%'))
->when(
$this->soundexUsername !== '',
fn ($query) => $query->whereRaw('SOUNDEX(username) = SOUNDEX(?)', [$this->soundexUsername]),
)
->when($this->email !== '', fn ($query) => $query->where('email', 'LIKE', '%'.$this->email.'%'))
->when(
$this->soundexEmail !== '',
fn ($query) => $query->when(
str_contains($this->soundexEmail, '@'),
fn ($query) => $query->whereRaw('SOUNDEX(email) = SOUNDEX(?)', [$this->soundexEmail]),
fn ($query) => $query->whereRaw("SOUNDEX(SUBSTRING_INDEX(email, '@', 1)) = SOUNDEX(SUBSTRING_INDEX(?, '@', 1))", [$this->soundexEmail])
)
)
->when($this->rsskey !== '', fn ($query) => $query->where('rsskey', 'LIKE', '%'.$this->rsskey.'%'))
->when($this->apikey !== '', fn ($query) => $query->where('api_token', 'LIKE', '%'.$this->apikey.'%'))
->when($this->passkey !== '', fn ($query) => $query->where('passkey', 'LIKE', '%'.$this->passkey.'%'))
@@ -18,6 +18,18 @@
{{ __('common.username') }}
</label>
</p>
<p class="form__group">
<input
id="soundexUsername"
class="form__text"
type="text"
wire:model.live="soundexUsername"
placeholder=" "
/>
<label class="form__label form__label--floating" for="soundexUsername">
Soundex {{ __('common.username') }}
</label>
</p>
<p class="form__group">
<input
id="email"
@@ -30,6 +42,18 @@
{{ __('common.email') }}
</label>
</p>
<p class="form__group">
<input
id="soundexEmail"
class="form__text"
type="text"
wire:model.live="soundexEmail"
placeholder=" "
/>
<label class="form__label form__label--floating" for="soundexEmail">
Soundex {{ __('common.email') }}
</label>
</p>
<p class="form__group">
<input
id="apikey"