klasss Posted December 5, 2021 at 06:06 PM Report Share #624801 Posted December 5, 2021 at 06:06 PM Tenho um controller com a seguinte qwery: $tabela = despesa::join ('utilizadors','utilizadors.id','=', 'despesas.id_funcionario') ->get(['utilizadors.id', 'utilizadors.nome', 'despesas.id', 'despesas.ficheiro','despesas.tipo_ficheiro', 'despesas.estado']); return view('painel-admin.despesas.validar', ['itens' => $tabela, 'id' => $id]); Nessa mesma controller tenho o que vai editar realmente: public function editar(Request $request, despesa $tabela){ $tabela->estado = "Aceite"; $tabela->save(); return redirect()->route('painel-admin.despesas.validar'); Que está a dar-me o seguinte erro: SQLSTATE[HY000]: General error: 1364 Field 'id_funcionario' doesn't have a default value (SQL: insert into `despesas` (`estado`) values (Aceite)) Na minha BD tenho apenas um registo: id | id_funcionario |ficheiro | tipo_ficheiro | estado 3 | 1 | public/despesas/iqPQa0ge6o4Qobj6zTKZzFxxkfZApfb8KK.pdf | despesas | Pendente o que me parece que está a fazer é tentar procurar o id_funcionario com valor 3 e não percebo o porque, deveria estar a procurar na tabela id Alguém me consegue explicar onde estou a errar? Link to comment Share on other sites More sharing options...
tiago.f Posted December 5, 2021 at 06:31 PM Report Share #624802 Posted December 5, 2021 at 06:31 PM Olá. Esse erro é porque o $tabela->save() está a tentar inserir um novo registo na BD e, como não tem os campos todos preenchidos (o 'id_funcionario' neste caso específico), está a dar erro. O problema é que a var $tabela, na função editar não está a ser "populada" com o registo da BD que tu esperas, mas como uma nova instância da classe despesa...à semelhança do que aconteceria se fizesses $tabela = new despesa(); Em linguagem de Laravel: há um problema com esse route model binding. Sem mais info não consigo ajudar, tens que partilhar o teu ficheiro das routes e a view que "chama" esta função editar Link to comment Share on other sites More sharing options...
klasss Posted December 8, 2021 at 11:40 AM Author Report Share #624864 Posted December 8, 2021 at 11:40 AM (edited) @tiago.f muito obrigado pela tua ajuda. Já andei a alterar o código e neste momento tenho o seguinte erro: Route [despesas.editar, $item] not defined. tenho estas rotas, onde Despesas/Validar é por assim dizer a principal que depois abre o modal que vai correr a function editar Route::get('Despesas/validar/', [DespesaController::class, 'validar'])->name('despesas.validar'); Route::get('Despesas/validar/{item}/aceita', [DespesaController::class, 'modal'])->name('despesas.modal'); Route::put('Despesas/validar/{item}', [DespesaController::class, 'editar'])->name('despesas.editar'); As 3 function's Validar apenas para mostrar os dados que tem o estado = pendente Modal - Para abrir o modal com o ID Editar - que altera o estado de Pendente para Aceite public function validar(){ //$tabela = despesa::paginate() $tabela = despesa::join ('utilizadors','utilizadors.id','=', 'despesas.id_funcionario') ->where('despesas.estado', '=', 'Pendente') ->get([ 'utilizadors.id', 'utilizadors.nome', 'despesas.id', 'despesas.ficheiro','despesas.tipo_ficheiro', 'despesas.estado']); return view('painel-admin.despesas.validar',['itens' => $tabela]); } public function modal(despesa $id){ //$item = despesa::orderby('id', 'desc')->paginate(); $tabela = despesa::join ('utilizadors','utilizadors.id','=', 'despesas.id_funcionario') ->where('despesas.estado', '=', 'Pendente') ->get([ 'utilizadors.id', 'utilizadors.nome', 'despesas.id', 'despesas.ficheiro','despesas.tipo_ficheiro', 'despesas.estado']); return view('painel-admin.despesas.validar', ['itens' => $item, 'id' => $id]); } public function editar(Request $request, despesa $item){ // dd($item); $item->estado = "Aceite"; $item->save(); return redirect()->route('despesas.validar'); } Modal com o botão de aceitar: <div class="modal fade" id="modalaceitar" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Aceitar Despesa</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> Deseja Realmente aceitar a despesa? </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button> <form id="form-perfil" method="POST" action="{{route('despesas.editar, $item')}}"> @csrf @method('put') <!-- @method('delete') --> <button type="submit" class="btn btn-success">Aceitar</button> </div> </div> </div> </div> Edited December 8, 2021 at 11:54 AM by klasss Link to comment Share on other sites More sharing options...
tiago.f Posted December 8, 2021 at 02:41 PM Report Share #624867 Posted December 8, 2021 at 02:41 PM action="{{route('despesas.editar, $item')}}" tens as plicas no sitio errado. Devia ser: action="{{route('despesas.editar', $item)}}" Link to comment Share on other sites More sharing options...
pedrox Posted December 27, 2021 at 09:36 PM Report Share #625083 Posted December 27, 2021 at 09:36 PM De notar que deves usar o parâmetro com o nome explicito: `route('route.name', ['param' => $value])` Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now