entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

¿Cómo hacer búsquedas con combianción de palabras en varias tablas?

Tengo en el controlador la consulta y los JOINS:

public function index(Request $request)
{

    $search = $request->get('search');

    $accommodations = Accommodation::search($request->search)
                    ->join("cities","cities.id","=","accommodations.city_id")
                    ->join("regions","regions.id","=","cities.region_id")
                    ->join("provinces","provinces.id","=","cities.province_id")
                    ->join("users","users.id","=","accommodations.user_id")
                    ->paginate(12);

    return view('admin/accommodations/index', compact('accommodations'));

}

Luego el Query Scope:

public function scopeSearch($query, $search)
{
    if (trim($search) != "")
        return $query->where(DB::raw("CONCAT(title, ' ', street, ' ', city, ' ', first_name, ' ', last_name, ' ', price, ' ', province, ' ', region)"), "LIKE", "%$search%");
}

Las búsquedas me funcionan bien, mientras consulto individualmente, ejemplo: Miramar, San Isidro, etc... Los busca en el campo City

O sí busco: La provincia, por alguna palabra que componga el titulo por precio, etc... Individualmente, pero necesito poder escribir: Posadas en Miramar y que me haga la búsqueda de coincidencias en ambos campos, city y title

¿Cómo podría lograrlo?

PD: en un cuadro de texto (Input) llamado search obtengo lo que el usuario escribe, y en base a ello se realiza la búsqueda.

1 Respuesta

2votos

FelipeMedel Puntos7400

para lo que deseas hacer,en algun momento yo lo hice de la siguiente manera:

  1. tendrías que tomar el valor de lo que ingresa el usuario (input) y separar las palabras en un array, luego en base a eso hacer la búsqueda por cada palabra de manera independiente, así la búsqueda traerá todo lo relacionado con cada cosa que escriba el usuario.

también se me ocurre que podrías hacer esto con la consulta:

  1. en el where tendrías que jugar con el like y crear unas condiciones especiales y/o especificas para el valor que pueda venir esto seria mas de manera independiente por cada campo de la tabla... aunque puede que no sea muy precisa al momento de consultar. (es decir un concat por cada campo)

espero te sirva... saludos

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta