can('alunos.ver_todos')) { $alunos = Aluno::query() ->with(['turma', 'escola', 'user', 'responsaveis']) ->orderBy('nome') ->get(); // ✅ mantenha UMA view só (ajuste o nome conforme sua tela real) return view('escolas.alunos', compact('alunos')); } // aluno/responsável if ($user->can('alunos.ver_meus')) { $alunos = Aluno::query() ->with(['turma', 'escola', 'user', 'responsaveis']) ->where(function ($q) use ($user) { $q->where('user_id', $user->id) ->orWhereHas('responsaveis', function ($r) use ($user) { $r->where('users.id', $user->id); }); }) ->orderBy('nome') ->get(); // ✅ a mesma view (evita duplicar telas) return view('escolas.alunos', compact('alunos')); } abort(403); } public function updateOrCreate(Request $request) { // ✅ Validação mínima (ajuste se quiser campos extras) $data = $request->validate([ 'cpf' => ['required', 'string', 'max:20'], 'nome' => ['required', 'string', 'max:255'], 'id_turma' => ['required', 'integer', 'exists:turmas,id'], 'id_escola' => ['required', 'integer', 'exists:escolas,id'], 'data_nascimento' => ['required', 'date'], 'data_inscricao' => ['required', 'date'], 'user_id' => ['nullable', 'integer', 'exists:users,id'], // ✅ múltiplos responsáveis (users ids) 'responsavel_ids' => ['nullable', 'array'], 'responsavel_ids.*' => ['integer', 'exists:users,id'], ]); DB::beginTransaction(); try { $aluno = Aluno::updateOrCreate( ['cpf' => $data['cpf']], [ 'nome' => $data['nome'], 'id_turma' => $data['id_turma'], 'id_escola' => $data['id_escola'], 'data_nascimento' => $data['data_nascimento'], 'data_inscricao' => $data['data_inscricao'], 'cpf' => $data['cpf'], 'user_id' => $data['user_id'] ?? null, ] ); // ✅ Pivot N:N responsáveis (se vier no request) // - syncWithoutDetaching: adiciona sem apagar os existentes // - sync: substitui os existentes if (!empty($data['responsavel_ids'])) { $aluno->responsaveis()->sync($data['responsavel_ids']); } DB::commit(); return redirect() ->route('alunos') ->with('success', 'Aluno Criado|Atualizado com sucesso.'); } catch (\Throwable $e) { DB::rollBack(); throw $e; } } }