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

Update com o ORM

Galera, como faço um update na minha tabela, usando ORM ? Estou fazendo assim:

public function gravar ($trem){ $novosDados = Request::all(); $diametro= Diametro::find($trem); $produto->update($novosDados); }

Tenho que usar o $id no lugar do $trem? Pois minha chave primaria é $trem. Estou recebendo isso:

Column not found: 1054 Unknown column 'diametro.id' in 'where clause' (SQL: select * from diametro where diametro.id = 301 limit 1).

6 respostas

Existe duas maneiras de fazer um UPDATE usando o Eloquent.

Método save:

$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();

Método update:

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

... Unknown column 'diametro.id' ...
Isso está acontecendo porque não existe a coluna diametro.id na sua Entidade.


Exemplo de Update
    public function updated(Client $client)
    {
        $client = Client::findOrFail($client->id);

        $client->fill(request()->only(['name', 'phone', 'email', 'workplace_id']));

        $client->save();

        return redirect()->action('ClientController@index');
    }

Mas realmente nao existe a coluna id. Eu nao coloquei o id na funcao. Porque esta aparecendo no erro? Tenho que usar o id?

Bem, na sua função você colocou um parâmetro chamado $trem. Ele é um ID da rota? Classe?

Faça um var_dump e verifique o que está sendo retornado ao usar find.

public function gravar ($trem){
    $diametro = Diametro::find($trem);
    return $diametro; // irá retornar um JSON automaticamente
}

Ta dando erro: nao encontra a varialvel trem. O que estou tentando e o seguinte: O usuario edita as informacoes, atraves de varios inputs, e quando clicar em gravar eu salvo essas informacoes novas no banco de dados fazendo um update. Quando eu mando inserir, ele cria uma nova linha na minha tabela, mas quando eu dou update ele nao funciona. Ta faltando eu pegar a informacao de qual linha fazer o update. Que no meu caso é a variavel trem. Como eu passo essa variavel para a funçao? E, depois, como chamar um update com todos os campos e gravar no bd? Grato.

solução!

Digamos que você fez o INSERT gerando mais um dado em sua tabela. Agora você ira criar uma Rota que irá redireciona-lo para uma outra página, para que você possa visualizar os dados que foram cadastrados.

Exemplo:

// Laravel Route
Route::get('/clients/{client}/edit', 'ClientController@edit');

// Link para visualizar os dados cadastrados.
<a href="/clients/{{ $client->id }}/edit" class="card-footer-item">Edit</a>

Fazendo isto, você irá montar sua página .blade trazendo os dados da rota, exemplo:

// Irá enviar os dados do Client para o .blade desejado

public function edit(Client $client)
{
  return view('client.edit', compact('client'));
}
Você irá montar um Form com os dados recebidos
...
<div class="field">
    <label class="label">Name</label>
    <div class="control">
        <input value="{{ $client->name }}" class="input" type="text" name="name">
     </div>
</div>
...

Após fazer isto, você irá criar uma Rota para fazer o Update.

// Rota para receber os dados

Route::patch('/clients/{client}', 'ClientController@updated');
// Método que irá fazer o UPDATE

public function updated(Client $client)
{
    $client = Client::findOrFail($client->id);

    $client->fill(request()->only(['name', 'phone', 'email', 'workplace_id']));

    $client->save();

    return redirect()->action('ClientController@index');
}
//ISSO VAI NO ProdutoController
        public function editar($id){
            $produto = Produto::find($id);
            return view('formulario')
            ->with('e', $produto)
            ->with('categorias', Categoria::all());
        }

        public function update(ProdutoRequest $request, $id){
            Produto::where('id', $id)->update($request->all());
            return redirect()
            ->action('ProdutoController@lista')
            ->withInput(Request::only('nome'));
        }
//*****************************

//ISSO VAI NO formulario.blade.php

//use essa expressão em cada campo ->  value="{{$e->nome or ''}}" 
//veja o exemplo abaixo
    <div class="form-group">
        <label>Nome</label>
        <input name="nome" value="{{$e->nome or ''}}" class="form-control"/>
    </div>