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();
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:
Explicación:
whereHas
se utiliza para filtrar los resultados en función de la existencia de registros relacionados en la tablaperson
que cumplan la condición dada.whereHas
recibe una instancia de consulta que se puede utilizar para aplicar condiciones adicionales a los registros relacionados deperson
.with
se utiliza para cargar de forma ansiosa los registros relacionados deperson
junto con los registros defascicoli
para evitar múltiples consultas.get
final se utiliza para ejecutar la consulta y recuperar la colección resultante deFascicoli
.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.