Solucionado (ver solução)
Solucionado
(ver solução)
28
respostas

Como salvar todos os registro que vem do foreach

No id do usuário ele tem 2 registro só que na hora de salvar ele só salva 1 registro e não os 2 como deveria

Segue Código abaixo

--Controller Lista os dados do usuário

public function listardados(){
        $matricula = Matricula::where('user_id', Auth::id())->get();

        //dd($matricula);
        return view('dashboard.renovacao.teste', compact( 'matricula'));
    }

-- Controller Salva

public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->all();

        $renovacao = Renovacao::create($dados);


        return view('dashboard.renovacao.confirmacao', compact ('renovacao'));
    }

-- View form

@extends('layouts.app') @section('content')

<div class="container">
    <div class="row">

        <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}
                <right>
                    <a>**Dados Cadastrados**</a>
                </right>
                <div class="row"></div>
                <div class="row"></div>
                <div class="row">
                    @foreach($matricula as $matric)
                    <div class="row">
                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Pai:</label>
                            <input type="text" class="form-control" name="nomerespo" value="{{ $matric->nomedopai }}">

                        </div>
                        </div>

                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Aluno(a):</label>
                            <input type="text" class="form-control" name="nomealuno" value="{{ $matric->nomealuno  }}">

                        </div>
                        </div>




                    </div>
                    @endforeach

                    <div class = "row">
                        <div class="col s12">

                            <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                <i class="material-icons left">arrow_back_ios</i>
                            </a>

                            <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                <i class="material-icons left">save</i>
                            </button>
                        </div>
                    </div>
                </div>
            </div>    
        </form>

    </div>
</div>
@endsection
28 respostas

Oi, está dando algum erro o código?

Não amigo, nenhum erro aparece quando salva, o problema é que só salva o ultimo dados do usuário e não todos que mostra na tela..

Segue o print Pra ver se você entendeu

1- Ele traz da tabela matricula o user_id relacionado ao usuário logado, automaticamente ele traz e joga no form e nele usuário verificar o nome do responsável e o nome do filho e clica no botão para salvar para confirmar.

print -> http://prntscr.com/llsn19

2 - Depois que salva o adm vai na aba relatório para verificar se todos os campos foram salvo só que ele só ta salvando o ultimo nome do aluno e do pai queria que salve todos os dados... como estava no primeiro print.

print tela do adm -> http://prntscr.com/llsof3

Hum, tá salvando no banco de dados? Se sim está indo os dois alunos? Dá uma checada no banco.

Ele só esta salvando o ultimo nome do aluno que é da maria o outro não salvou

Tipo ele vê que preencheu o form e já salva e não pega os dados do outro form, não sei se você viu o código do controller e o formulário se ele está correto ou não a função store que salva os dados


Esse é o mesmo que esse né https://cursos.alura.com.br/forum/topico-buscar-dados-tabela-relacionada-73358 . To pondo aqui pra organizar.

Entendi ele tá salvando somente um porque no post você tá passando o mesmo input de joão e de maria. Sendo que maria é o último e só ela vai.

Você tem que fazer ele colocar nomerespo_numero e nomealuno_numero e fazer esse numero no html virar um número.

E na hora de receber o post você tem que pegar todos esses números fazendo um while nomerespo_numero e nomealuno_numero não for vazio e ir tratando as variáveis.

Outro era para buscar e achei a solução esse tópico aqui é problema quando salva

Como ficaria poderia mostrar um exemplo com while ? Porque transformar ele em número ? Não entendi essa parte

Claro, haha desculpa a ignorância mas qual linguagem está usando? Ultimamente são todas parecidas.

php, estou utilizando o framework laravel para ajudar porque php puro é uma dó de cabeça maior kkk

vish laravel... ainda não aprendi. posso te mostrar em php puro?

Pode sim

A parte do post ficaria assim

<div class="row">
    <?php
        $contador=0;
    ?>
    @foreach($matricula as $matric)
    <?php
        $contador=$contador+1;
    ?>
    <div class="row">
        <div class="col s6 m6">
            <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                <label for="produto">Nome do Pai:</label>
                <input type="text" class="form-control" name="nomerespo_<?php echo $contador?>" value="{{ $matric->nomedopai }}">
            </div>
        </div>

        <div class="col s6 m6">
            <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                <label for="produto">Nome do Aluno(a):</label>
                <input type="text" class="form-control" name="nomealuno_<?php echo $contador?>" value="{{ $matric->nomealuno  }}">
            </div>
        </div>
    </div>

E a que vai pegar esse post
 <?php
    $contador = 1;

    while(($_POST["nomerespo_"+$contador] != "") && ($_POST["nomealuno_"+$contador] != "")) {
        echo $_POST["nomerespo_"+$contador] ;
        echo $_POST["nomealuno_"+$contador] ;
        $contador=$contador+1;
    }
?> 

Entendeu?

Mais ou menos agora tô analisando como usar pra funcionar kkkkkkk

Eu fiz desse modo só que n funcionou :/

 public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->all();

        $contador = 1;

        $contador=$contador+1;

        $renovacao = Renovacao::create($dados);


        return view('dashboard.renovacao.confirmacao', compact ('renovacao' , 'contador'));
    }

view

@extends('layouts.app') @section('content')

<div class="container">
    <div class="row">

        <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}
                <right>
                    <a>**Dados Cadastrados**</a>
                </right>
                <div class="row"></div>
                <div class="row"></div>
                <div class="row">
                    <?php
                        $contador=0;

                    ?>
                    @foreach($matricula as $matric)

                    <?php
                        $contador=$contador+1;
                    ?>

                    <div class="row">
                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Pai:</label>
                            <input type="text" class="form-control" name="nomerespo $contador" value="{{ $matric->nomedopai }}">

                        </div>
                        </div>

                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Aluno(a):</label>
                            <input type="text" class="form-control" name="nomealuno $contador" value="{{ $matric->nomealuno  }}">

                        </div>
                        </div>




                    </div>
                    @endforeach




                    <div class = "row">
                        <div class="col s12">

                            <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                <i class="material-icons left">arrow_back_ios</i>
                            </a>

                            <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                <i class="material-icons left">save</i>
                            </button>
                        </div>
                    </div>
                </div>
            </div>    
        </form>

    </div>
</div>
@endsection

Assim não vai passar mesmo, não sei como funciona o laravel mas dessa forma você não informou o que fazer com todos request que ele pegou. Tem outro jeito mais fácil de matar esse problema. Ao invés de querer pegar vários alunos de uma vez só como você estava fazendo pega um de cada vez.

Como vai funcionar, naquela sua página você faz um checkbox [x] Cadastrar outro aluno. Se esse checkbox estiver selecionado a página posta os dados do aluno , e redireciona pra ela mesma pra cadastrar outro aluno. Já vi usarem assim na web. Só não pede pra eu dar um exemplo que com laravel não vou conseguir fazer e o php puro não vai se encaixar rsrsrs .

Essa função é tipo renovação de matricula pow, caso eles tem 3 filhos já cadastra os 3 de uma vez só, que no caso ele puxa o user_id que foi cadastrado na tabela matricula, porque você sabe ne mano como o povo é preguiçoso querem que um botão faça mil coisas.

Tá certo, vou dar uma estudada em laravel assim que der pra te ajudar. Enquanto isso vou ver se encontro alguém que possa nos ajudar nessa questão.

Tem os adm que manja que sempre me ajuda só não sei como marca-los aqui

Não dá pra marcar tipo com @ mas me fala o nome de quem te ajuda que eu cutuco ele (tenho o contato direto de vários). Aliás já mandei sua dúvida pro instrutor de Laravel, quem sabe ele consegue nos ajudar. Eu já deixei tudo mastigado é só digitar código agora rsrsrs.

Tem o Wanderson Macêdo, André Chaves , Alessandro Palmeira, Eles são que mais me salvaram kkkk

Passei pros moderadores também eles vão dar um jeito, fica tranquilo. Continue estudando nos cursos que quando menos esperar a resposta vai chegar.

Nada ainda :/

Umas das soluções que deram foi essa em outro fórum a resposta completa está no comentário logo abaixo...

De:
<input type="text" class="form-control" name="nomerespo" value="{{ $matric->nomedopai }}">
<input type="text" class="form-control" name="nomealuno" value="{{ $matric->nomealuno }}">

para:

<input type="text" class="form-control" name="nomerespo[]" value="{{ $matric->nomedopai }}">
<input type="text" class="form-control" name="nomealuno[]" value="{{ $matric->nomealuno }}">

Repare que os atributos name das tags foram alterados para um array, assim todos os campos serão enviados para o seu Controller

Caso a relação com Renovacao com usuário tenha sido definida e a propriedade $guarded ou $fillable estejam definidas em Renovacao poderá salvar o conteúdo com algo da forma: $user->renovacoes()->saveMany($dados) e o Laravel tratará da relação de chaves estrangeiras para você.

//Controller

 public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->all();


        $renovacao = Renovacao::create($dados);
        $user->renovacao()->saveMany($dados);




        return view('dashboard.renovacao.confirmacao', compact ('renovacao'));
    }

// Form

@foreach($matricula as $matric)
                    <div class="row">
                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Pai:</label>
                            <input type="text" class="form-control" name="nomerespo[]" value="{{ $matric->nomedopai }}">

                        </div>
                        </div>

                        <div class="col s6 m6">
                        <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                            <label for="produto">Nome do Aluno(a):</label>
                            <input type="text" class="form-control" name="nomealuno[]" value="{{ $matric->nomealuno }}">

                        </div>
                        </div>




                    </div>
                    @endforeach

Oi Elyton, tudo bom?

Acho que não entendi muito bem seu ultimo comentário. Seu problema foi solucionado? Essa é a solução?

Abraço

solução!

Corrigi o comentário acima a solução é essa

-- Controller store salvar os dados do form 

public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->get('rematricula');

        foreach ($dados as $key => $dado) {

            Renovacao::create($dado);
        }




        return view('dashboard.renovacao.confirmacao', compact ('renovacao'));
    }

-- Form corrigido de brinde vem a mensagem de erro caso não tenha cadastro registrado no banco pelo id do usuário.

@extends('layouts.app') @section('content')

<div class="container">
    <div class="row">

        <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}

                <div class="row">
                    @if($matricula->count())
                        <right>
                            <a>**Dados Cadastrados**</a>
                        </right>
                        <div class="row"></div>
                        <div class="row"></div>
                        @foreach($matricula as $matric)

                            <div class="row">
                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Pai:</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomerespo]" value="{{ $matric->nomedopai }}">
                                </div>
                                </div>

                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Aluno(a):</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomealuno]" value="{{ $matric->nomealuno }}">
                                </div>
                                </div>

                            </div>

                        @endforeach
                        <div class="col s12 m6">
                            <div class="row"></div>
                            <div class="row"></div>
                            <div class="row">
                                <div>
                                    <div class="card-panel white ">
                                        <b class="black-text">AVISO? </b></br></br>
                                        <span>• Por favor Senhor(a) Responsável(a) Solicitamos que após solicitar renovação
                                            procure a secretaria da escola para confirmar a renovação e verificar se existe pendência de documentos do aluno</span></br></br>

                                    </div>
                                </div>
                            </div>
                            <div class="row">
                            </div>
                        </div>


                        <div class = "row">
                            <div class="col s12">

                                <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                                </a>

                                <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                    <i class="material-icons left">save</i>
                                </button>
                            </div>
                        </div>
                    @else
                        <div class="row"></div>
                        <div class="row"></div>
                        <p> Desculpe! Página Indisponivel, Você não tem cadastro nessa instituição, Procure a secretaria e faça sua Matrícula </p>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                        </a>
                    @endif



                </div>
            </div>    
        </form>
    </div>
</div>
@endsection

Boa! To marcando aqui como solução =)

Obrigado por compartilhar com a gente!