Maison > Questions et réponses > le corps du texte
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粉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 . '%' ); });