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

Como usar o updateOrCreate

Já migrei a função de salvar para Produto::create, porém não consigo fazer para update. Por enquanto estou atualizando os dados desta forma: ''' public function atualiza(){ $id=Request::input('id'); $nome=Request::input('nome'); $descricao=Request::input('descricao'); $valor=Request::input('valor'); $quantidade=Request::input('quantidade'); $tamanho=Request::input('tamanho');

DB::update('update produtos set nome=?,descricao=?, valor=?, quantidade=?, tamanho=? where id=?', array($nome, $descricao,$valor, $quantidade,$tamanho, $id));

return redirect('/produtos')->withInput(); }'''

POrém ainda tem muita linha, queria conseguir usar o Produto::updateOrCreate, mas como? Já googlei e nada! Uso o laravel 5.1.

4 respostas

Olá Bruno, tudo bem? O próprio save já faz esse papel, de updateOrCreate. I.e:

$produto = Produto::find(1);
$produto->name = 'Nome novo';
$produto->save();

Nesse caso ele só vai alterar -- fazer update -- do campo nome desse produto de id 1.

Percebe? O que diferencia um do outro, é que no update você sabe o ID, portanto faz um find antes.

Não deixe de dar uma olhada em http://laravel.com/docs/5.1/eloquent#basic-updates

Rodrigo, bem lógico isso, mas não me atentei! Primeiro recupero o objeto do banco com o ID que eu tenho, depois seto o valor no atributo que está sofrendo alteração e salvo?Entendido! Vlw e grande abraço!

Surgiu uma dúvida nisso: poderia usar o $request->all() depois do find($id)?

solução!

Oi Bruno, tudo bem? Você tb pode fazer o update com mass assign. Algo como:

$produto = Produto::find(1);
$params = $request->all();
$produto->update($params);

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software