Tengo ids que vienen por array, necesito sacarlos todos y hacer selecciones en el banco usando cada uno con diferentes retornos de acuerdo a la selección. Puedo traer los números, pero no funciona para separar y usar la selección automáticamente de acuerdo con la cantidad de registros en la matriz.
A continuación se muestra la forma en que obtengo la matriz:
Matriz de resultados $escuelas
Array ( [0] => stdClass Object ( [id] => 1 [school_type_id] => 2 [external_id] => [name] => School1 [active] => 1 [created_at] => 2020-02-21 23:42:11 [updated_at] => 2020-02-21 23:42:11 [deleted_at] => [active_text] => Ativo ) [1] => stdClass Object ( [id] => 81 [school_type_id] => 2 [external_id] => [name] => School2 [active] => 1 [created_at] => 2015-05-27 18:08:52 [updated_at] => 2015-05-27 18:08:52 [deleted_at] => [active_text] => Ativo ) )En el controlador que estoy usando para traer solo los valores que quiero, pero necesito hacer una selección con ellos y separarlos de acuerdo con cada uno.
Controlador.php
$schools = collect($api->schools); $info = $schools->pluck('id'); for($i = 0;$i<count($info);$i++){ $select = DB::table('sys_record') ->where('sys_record.id_step','<=',4) ->where('sys_users.schoolId','=',$info[$i]) ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user') ->get(); $information[] = count($select); print_r($information); /*return Array ( [0] => 3 ) Array ( [0] => 3 [1] => 1 ) }*/se devuelve la matriz 31, necesito 4
Por lo que entiendo, desea recuperar la suma de los resultados.
Para eso, su código debería verse así:
for($i = 0;$i<count($info);$i++){ $select = DB::table('sys_record') ->where('sys_record.id_step','<=',4) ->where('sys_users.schoolId','=',$info[$i]) ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user') ->get(); $information[] = count($select); } $total = array_sum($information); print_r( $total );O un poco más agradable:
$schools = collect($api->schools); $info = $schools->pluck('id'); $information = 0; foreach( $info as $k => $i){ $results_count = DB::table('sys_record') ->where('sys_record.id_step','<=',4) ->where('sys_users.schoolId','=',$info[$i]) ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user') ->count(); $information += $results_count; } print_r( $information );EDITAR O incluso mejor (no estoy seguro de si esto funciona, pero entiendes la idea). Esto solo ejecutará una consulta para todas las escuelas en lugar de ejecutar una consulta separada para cada escuela:
$schools = collect($api->schools); $info = $schools->pluck('id'); $results_count = DB::table('sys_record') ->where('sys_record.id_step','<=',4) ->whereIn('sys_users.schoolId', $info) ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user') ->count(); print_r( $results_count );