Rechercher une chaîne dans plusieurs colonnes d'une table relationnelle à l'aide de Laravel WhereRelation
P粉590929392
P粉590929392 2024-03-19 17:39:04
0
1
353

J'ai une relation avec les modèles spatiaux,

public function user()
{
  return $this->belongsTo(User::class)->withTrashed();
}

Dans mon contrôleur, je souhaite rechercher une chaîne dans les colonnes "first_name" et "last_name" de la table "users".

Mais je n'ai pas trouvé la syntaxe pour écrire la condition "ou" dans WhereRelation.

$query = new Space();

$query = $query->with('user')->whereRelation('user', 'first_name', 'like', '%' . $request->search . '%');

Comment rechercher une chaîne dans plusieurs colonnes d'une table relationnelle à l'aide dewhereRelation ?

P粉590929392
P粉590929392

répondre à tous(1)
P粉511749537

Option 1. Vous pouvez effectuer une recherche dans deux champs séparément :

Space::with('user')->whereHas('user', function ($query) use ($request) {
    $query->where('first_name', 'LIKE', '%' . $request->search . '%')
        ->orWhere('last_name', 'LIKE', '%' . $request->search . '%');
});

Option 2. Je suppose que ce que vous voulez vraiment, c'est concaténer les deux champs ensemble (avec un espace entre les deux), puis comparer votre recherche à ce champ :

use Illuminate\Support\Facades\DB;

// ...

Space::with('user')->whereHas('user', function ($query) use ($request) {
    $query->where(
        DB::raw('CONCAT(first_name, " ", last_name)'),
        'LIKE',
        '%' . $request->search . '%'
    );
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal