Maison  >  Questions et réponses  >  le corps du texte

Rechercher une chaîne dans plusieurs colonnes d'une table relationnelle à l'aide de Laravel WhereRelation

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粉590929392P粉590929392237 Il y a quelques jours311

répondre à tous(1)je répondrai

  • P粉511749537

    P粉5117495372024-03-20 16:38:40

    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 . '%'
        );
    });
    

    répondre
    0
  • Annulerrépondre