where(function ($query) use ($attributes, $searchTerm) { foreach ($attributes as $attribute) { $query->when( str_contains($attribute, '.'), function ($query) use ($attribute, $searchTerm) { [$relationName, $relationAttribute] = explode('.', $attribute); $query->orWhereHas($relationName, function ($query) use ($relationAttribute, $searchTerm) { $query->where($relationAttribute, 'LIKE', "%{$searchTerm}%"); }); }, function ($query) use ($attribute, $searchTerm) { $query->orWhere($attribute, 'LIKE', "%{$searchTerm}%"); } ); } }); } }