es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Condiciones “con” y “donde” de Laravel con múltiples tablas

Tengo dos tablas vinculadas uno a muchos (archivos->personas). Necesito seleccionar todos los archivos donde las personas tienen un cierto nombre pero necesito todo el grupo de esa selección.

FASCICOLI:

id numero anno
1 1 2020
2 1 2021

PEOPLE:

id fascicoli_id fascicoli_numero fascicoli_anno cognome
1 1 1 2020 Urbano
2 1 1 2020 Del Mastro
3 2 2 2021 Di Ciano

Bueno, si hago una búsqueda donde ‘cognome’ LIKE ‘% Del’ (id = 2), también debo recibir los otros registros con el mismo fascicoli_id (por lo tanto, tanto ‘Del Mastro’ como ‘Urbano’).

He intentado con lo siguiente (donde $query es el parámetro de búsqueda que paso con el método GET en ajax):

$fascicoli = Fascicoli::with(‘person’)->get();
$fascicoli = $fascicoli[0]->person()->where(‘cognome’, ‘like’, ‘%’.$query.’%’)->get();

y

$fascicoli = Fascicoli::whereHas(‘person’, function($sub) use($query){
$sub->where(‘cognome’, ‘like’, ‘%’.$query.’%’);
})->get();

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar todos los archivos en los que las personas tengan un cierto nombre pero necesite el grupo completo de esa selección, puede utilizar la siguiente consulta de Laravel Eloquent:

    $fascicoli = Fascicoli::whereHas('person', function ($query) use ($name) {
        $query->where('cognome', 'LIKE', '%'.$name.'%');
    })->with('person')->get();
    

    Explicación:

    • El método whereHas se utiliza para filtrar los resultados en función de la existencia de registros relacionados en la tabla person que cumplan la condición dada.
    • La función de devolución de llamada en whereHas recibe una instancia de consulta que se puede utilizar para aplicar condiciones adicionales a los registros relacionados de person.
    • El método with se utiliza para cargar de forma ansiosa los registros relacionados de person junto con los registros de fascicoli para evitar múltiples consultas.
    • El método get final se utiliza para ejecutar la consulta y recuperar la colección resultante de Fascicoli.

    Tenga en cuenta que, en este ejemplo, $name es el parámetro de búsqueda pasado a través del método GET en AJAX. Puede reemplazarlo con cualquier variable o cadena que represente el nombre que desea buscar.

Comments are closed.