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

Fazer um UPDATE

Olá, bom dia! Eu estou tentando fazer um update daqueles com o código bem "enxugado" mas ainda não consegui ele ainda não está alterando, segue o código:

Essa é minha rota:

Route::get('/produtos/altera/{id?}', 'ProdutoController@altera')->where('id', '[0-9]+');

"Por curiosidade... Eu mudando para post a página da um erro dizendo que tem algo errado se puder ajudar também kkk"

Esta é minha função:

public function altera($id){
  $param = Request::all();
  $produto = laravel::find($id);
  $produto->update();
  if(empty($produto)){
    return 'o produto nem existe cara';
  }else{
    return view('produtos.altera')->with('p', $produto);
  }

Esta é minha view:

@extends('layout.principal')
@section('conteudo')
<form action="/produtos" method="GET">
    <div class="form-group">    
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <label> Nome:</label>
        <input class="form-control" type="" name="nome" value="{{$p->nome}}">         
    </div>
    <div class="form-group">    
        <label>Valor:</label>
        <input class="form-control" type="" name="valor" value="{{$p->valor}}">
    </div>
    <div class="form-group">
        <label>Quantidade:</label>
        <input class="form-control" type="" name="quantidade" value="{{$p->quantidade}}">
    </div>
    <div class="form-group">
        <label>Descrição:</label>
        <textarea class="form-control" name="descricao" value="{{$p->descricao}}"></textarea><br/>
    <button class="btn btn-primary" type="submit">Alterar</button>
    </div>
</form>
@stop
4 respostas

Qual mensagem de erro está acontecendo? Os dados estão sendo enviados pelo formulário?

Oi Gabriel, não tem uma mensagem de erro os dados estão sendo enviados mas ele não altera

Falta você inserir os parâmetros do form como valores dos atributos do Produto.

 $param = Request::all(); // Recupera os valores do form

  $produto = laravel::find($id); // Localiza o produto

  $produto->quantidade = Request::input('quantidade');
/* Falta inserir código para alterar no produto os valores enviados pelo form */

  $produto->update(); // Atualiza o produto

ou

  $produto->update($param); // Atualiza o produto
solução!

Bem, não sei se você já conseguiu resolver seu problema, entretanto, sua lógica/código está errado.

Nunca use GET para fazer um UPDATE, use PUT / PATCH. Recomendo que estudo sobre os Verbos HTTP.

Provavelmente você irá passar um ID na sua rota de Update, fazendo isso você irá fazer um ::find ou ::findOrFail


Exemplo - 01
public funtion update(Request $request, Person $person)
{
    $person->fill($request->all());
    $person->update();
}


Exemplo - 02
public funtion update(Request $request)
{
    $person = Person::find($request->id);
    $person = Person::findOrFail($request->id); // também é possível fazer desta maneira!

    $person->fill($request->all());
    $person->save();
}