Estou tentando fazer a função de alterar os dados dos produtos, para isso fiz da seguinte forma:
Criei uma rota para exibir o formulário com os dados preenchidos, assim como uma rota para efetuar o update:
<?php
Route::get('/', function()
{
return '<h1>Primeira lógica com Laravel</h1>';
})
Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra')->where('id', '[0-9]+');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::post('/produtos/adiciona', 'ProdutoController@adiciona');
Route::get('/produtos/remove/{id}', 'ProdutoController@remove');
Route::get('/produtos/busca/{id}', 'ProdutoController@busca')->where('id', '[0-9]+');
Route::post('/produtos/altera', 'ProdutoController@altera');
Criei uma view para exibir o formulário com os dados do produto preenchido, para que o usuário possa alterar:
@extends('layout/principal')
@section('conteudo')
<div class="container">
<h1>Alterar Produto {{$p->nome}}</h1>
<form action="http://kingstecnologia.com.br/estoque/public/produtos/altera" method="post">
{{ csrf_field() }}
<div class="form-group">
<label>Nome</label>
<input type="hidden" name="id" value="{{$p->id}}">
<input class="form-control" type="text" name="nome" value="{{$p->nome}}" />
<label>Valor</label>
<input class="form-control" type="number" name="valor" value="{{$p->valor}}"/>
<label>Descrição</label>
<input class="form-control" type="text" name="descricao" value="{{$p->descricao}}" />
<label>Quantidade</label>
<input class="form-control" type="number" name="quantidade" value="{{$p->quantidade}}"/>
<button type="submit">Salvar</button>
</div>
</form>
</div>
@stop
E no Controller criei duas funções a busca(Retorna os dados do produto para preencher o formulário) e altera (Faz o update no banco).
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Request;
use App\Produto;
class ProdutoController extends Controller{
public function lista(){
$produtos = Produto::all();
return view('produto/listagem')->with('produtos', $produtos);
}
public function mostra($id){
$resposta = produto::find($id);
if(empty($resposta)) {
return "Esse produto não existe";
}
return view('produto/detalhes')->with('p', $resposta);
}
public function novo(){
return view('produto/formulario');
}
public function adiciona(){
// pegar dados do formulario
Produto::create(Request::all());
// retornar alguma view
return redirect()->action('ProdutoController@lista')->withInput(Request::only('nome'));
}
public function remove($id){
$produto = Produto::find($id);
$produto->delete();
return redirect()
->action('ProdutoController@lista');
}
public function busca($id){
$resposta = produto::find($id);
if(empty($resposta)) {
return "Esse produto não existe";
}
return view('produto/formularioAltera')->with('p', $resposta);
}
public function altera(){
$params = Request::all();
$produto = new Produto($params);
$produto->save();
return redirect()->action('ProdutoController@lista')->withInput(Request::only('nome'));
}
}
?>
Quando executo a função altera o sistema da erro "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '45' for key 'PRIMARY' (SQL: insert into produtos
(id
, nome
, valor
, descricao
, quantidade
) values (45, Aiua, , 2, 2))"
devido já ter um produto com o mesmo id, sendo que é exatamente isso que desejo, pois quero fazer um update.
Gostaria de ajuda para solucionar o problema usando os recursos do Eloquent, pois em SQL sei fazer.