21
respostas

NÃO CONSIGO ATUALIZAR

web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ClienteController;


Route::get('cliente',[ClienteController::class, 'cadastro'])
    ->name('tabela_orcamentos');

Route::get('cliente/criar',[ClienteController::class, 'create']);

Route::post('cliente/criar/',[ClienteController::class, 'store'])
    ->name('add_orcamento');

Route::delete('cliente/{id}',[ClienteController::class, 'destroy']);

Route::get('cliente/editar/{id}',[ClienteController::class, 'edit']);

Route::put('cliente/{id}/editar/',[ClienteController::class, 'editar']);

ClienteController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Http\Request;

use App\Http\Requests\ValidaFormRequest;

use App\Orcamento;

use App\Models\Flight;

use Illuminate\Support\Facades\DB;


class ClienteController extends Controller
{
    public function cadastro(Request $request)
    {
        $cadastros = Orcamento::all();
        $mensagem = $request->session()->get('mensagem');
        return view("cadastro.index", compact('cadastros', "mensagem"));
    }

    public function create(Request $request)
    {
        $id = '';
        $request->session()
        ->flash(
            'titulo',
            "Adicionar"
        );
        $titulo = $request->session()->get('titulo');
        return view('cadastro.create', compact("titulo", "id"));
    }

    public function store(ValidaFormRequest $request)
    {
        $cadastros = Orcamento::create($request->all());

        $request->session()
            ->flash(
                'mensagem',
                "Orçamento cadastrado com sucesso"
            );
        return redirect()->route('tabela_orcamentos');

    }

    public function destroy(Request $request)
    {
        Orcamento::destroy($request->id);
        $request->session()
            ->flash(
                'mensagem',
                "Orçamento foi excluido com sucesso"
            );
        return redirect()->route('tabela_orcamentos');
    }



    public function edit(Request $request, $id){
        $orcamentos = DB::select('select * from orcamentos where id = :id', ['id' => $id]);

        foreach ($orcamentos as $user) {
            $teste = $user->codigo;
        }


        $request->session()
        ->flash(
            'titulo',
            "Editar"
        );
        $titulo = $request->session()->get('titulo');
        return view('cadastro.create', compact("titulo", "user", "orcamentos", "id"));
    }

    public function editar(Request $request, $id){

        $cadastros = Orcamento::find($request->$id);
        var_dump($cadastros);

        // $request->session()
        //     ->flash(
        //         'mensagem',
        //         "Orçamento atualizado com sucesso"
        //     );
        // return redirect()->route('tabela_orcamentos');
}

}
21 respostas

create.blade.php

@extends ('layout')

@section ('cabecalho')
    {{ $titulo }}
@endsection

@section ('conteudo')

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

@if(!$id)
    <form method="post" class="mt-5 pt-5">
    @csrf

@else
    <form method="post" action='/cliente/{id}/editar' class="mt-5 pt-5">
        @method('PUT')
        @csrf
@endif
        <div class="form-group">

            <label for="codigo" class="form-label">Codigo: </label>
            <input type="text" class="form-control" id="codigo" value="@if(!empty($user->codigo)) {{$user->codigo}} @endif "  name="codigo" >

            <label for="cliente" class="form-label">Nome do Cliente: </label>
            <input type="text" class="form-control" id="cliente" value="@if(!empty($user->codigo)) {{$user->cliente}} @endif " name="cliente">

            <label for="data" class="form-label">Data: </label>
            <input type="text" class="form-control" id="data" value="@if(!empty($user->codigo)) {{$user->data}} @endif " name="data" >

            <label for="hora" class="form-label">Horario: </label>
            <input type="test" class="form-control" id="hora" value="@if(!empty($user->codigo)) {{$user->hora}} @endif " name="hora">

            <label for="vendedor" class="form-label">Nome do vendedor: </label>
            <input type="text" class="form-control" id="vendedor" value="@if(!empty($user->codigo)) {{$user->vendedor}} @endif " name="vendedor">

            <label for="valor" class="form-label">Valor: </label>
            <input type="text" class="form-control" id="valor" value="@if(!empty($user->codigo)) {{$user->valor}} @endif " name="valor">

            <label for="descricao" class="form-label">Descrição: </label>
            <input type="text" class="form-control" id="descricao" value="@if(!empty($user->codigo)) {{$user->descricao}} @endif " name="descricao">
        </div>

        <button class="mt-2 btn btn-dark">Adicionar</button>

    </form>

@endsection

index.blade.php

@extends ('layout')

@section('cabecalho')
    Cadastro de Clientes
    <a href="{{ route('add_orcamento') }}" class="btn btn-dark " style="right: 3%;">
            Adicionar
    </a>
@endsection

@section('conteudo')

@if(!empty($mensagem))
    <div class="container alert alert-success mt-5">
        {{ $mensagem }}
    </div>

@endif

    <div class="container mt-5 pt-5">


        <table class="table table-bordered">

            <thead >
                <th scope="col">Codigo</th>
                <th scope="col">Cliente</th>
                <th scope="col">Data</th>
                <th scope="col">Hora</th>
                <th scope="col">Vendedor</th>
                <th scope="col">Valor</th>
                <th scope="col">Descrição</th>
                <!-- <th class="text-center">Excluir</th>
                <th class="text-center">Editar</th> -->
            </thead>

            <tbody >

            @foreach($cadastros as $cadastro )
            <tr>
                <td class="">{{ $cadastro->codigo }}</td>

                <td class="">{{ $cadastro->cliente }}</td>

                <td class="">{{ $cadastro->data }}</td>

                <td class="">{{ $cadastro->hora }}</td>

                <td class="">{{ $cadastro->vendedor }}</td>

                <td class="">{{ $cadastro->valor }}</td>

                <td class="">{{ $cadastro->descricao }}</td>

                <td >
                    <form method="post" class="d-flex justify-content-around align-items-center"
                            action="/cliente/{{ $cadastro->id }}"
                            onsubmit="return confirm('Tem certeza que deseja remover o cliente: {{ addslashes($cadastro->cliente) }} ?')">
                        @csrf
                        @method('DELETE')
                            <button class="btn btn-danger btn-sm">
                                <i class="fa fa-trash-o" style="font-size:20px; color:#fff"></i>
                            </button>
                    </form>
                </td>

                <td >

                    <a href="/cliente/editar/{{ $cadastro->id }}">
                        <button class="btn btn-primary btn-sm" >
                            <i class="fa fa-edit"></i>
                        </button>
                    </a>
                </td>


            </tr>
            @endforeach

            </tbody>
        </table>


    </div>



@endsection




Qual o erro gerado Leonardo? vc obteve alguma mensagem?

aparece NULL

se eu tirar o var_dump e colocar o return ele me manda de volta pra tela onde ta as tabelas e me mostra a msg de sucesso com se eu tivesse conseguido editar mas não alterar nenhum dado

Tenta ver se chegam os dados da sua request assim:

    public function editar(Request $request, $id){

    dd($request);

        $cadastros = Orcamento::find($request->$id);
        var_dump($cadastros);

        // $request->session()
        //     ->flash(
        //         'mensagem',
        //         "Orçamento atualizado com sucesso"
        //     );
        // return redirect()->route('tabela_orcamentos');
}

a função DD ira mostrar para vc os dados enviados, verifica no inspecionar elementos do Chrome na aba "network" se estão sendo passados os parâmetros para a sua função, algo parecido com isso:

  +request: Symfony\Component\HttpFoundation\ParameterBag {#44
    #parameters: array:2 [
      "nome" => "Rodrigo Santiago 22"
      "_token" => "5AztdOBEqf612eihgLLb9Kd7z344x0gqIS7HTW"
    ]
  }

E na verdade na sua função de editar está faltando atribuir os valores e salvar as mudanças

por exemplo:

    $novoNome = $request->cliente;
        $cadastros ->nome = $novoNome;
        $serie->save();

    $request->session()
                ->flash(
                'mensagem',
                "Orçamento atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');

No caso vc precisaria adaptar a sua necessidade, só ilustrei usando nome, mas vi que vc usa algo de orçamento

me retorno isso quanto usei o primeiro exemplo

Illuminate\Http\Request {#43 ▼
  #json: null
  #convertedFiles: null
  #userResolver: Closure($guard = null) {#226 ▶}
  #routeResolver: Closure() {#235 ▶}
  +attributes: Symfony\Component\HttpFoundation\ParameterBag {#45 ▶}
  +request: Symfony\Component\HttpFoundation\ParameterBag {#44 ▶}
  +query: Symfony\Component\HttpFoundation\InputBag {#51 ▶}
  +server: Symfony\Component\HttpFoundation\ServerBag {#47 ▶}
  +files: Symfony\Component\HttpFoundation\FileBag {#48 ▶}
  +cookies: Symfony\Component\HttpFoundation\InputBag {#46 ▶}
  +headers: Symfony\Component\HttpFoundation\HeaderBag {#49 ▶}
  #content: null
  #languages: null
  #charsets: null
  #encodings: null
  #acceptableContentTypes: null
  #pathInfo: "/cliente/%7Bid%7D/editar"
  #requestUri: "/cliente/%7Bid%7D/editar"
  #baseUrl: ""
  #basePath: null
  #method: "PUT"
  #format: null
  #session: Illuminate\Session\Store {#258 ▶}
  #locale: null
  #defaultLocale: "en"
  -preferredFormat: null
  -isHostValid: true
  -isForwardedValid: true
  -isSafeContentPreferred: null
  basePath: ""
  format: "html"
}

Na network não aparece nada

Dentro de Request estão vindo seus dados?

+request: Symfony\Component\HttpFoundation\ParameterBag {#44 ▶}

No segundo exemplo da esse erro aqui : Attempt to assign property "orcamento" on null

não sei se eu coloquei o codigo da forma correta

public function editar(Request $request, $id){

        $novoNome = $request->cliente;
        $cadastros ->orcamento = $novoNome;
        $cadastros->save();

    $request->session()
                ->flash(
                'mensagem',
                "Orçamento atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');
    }

estão vindo sim

 +request: Symfony\Component\HttpFoundation\ParameterBag {#44 ▼
    #parameters: array:9 [▼
      "_method" => "PUT"
      "_token" => "dguurfwhwfKdc4vmx5ELftSfISNUU386KkTAM9ch"
      "codigo" => "000"
      "cliente" => "0000"
      "data" => "0000"
      "hora" => "00000"
      "vendedor" => "0000"
      "valor" => "00000"
      "descricao" => "0000"
    ]
  }

mas aparentemente não existe esse orcamento no seu banco de dados, existe?

vc tentou salvar o valor "cliente" que veio por parametro do request em "orcamentos"

e não sei se vc colocou antes, mas vc precisa encontrar o objeto

$cadastros = Orcamento::find($request->$id);

ai logo depois realizaria as operações

        $novoNome = $request->cliente;
        $cadastros ->orcamento = $novoNome;
        $cadastros->save();

    $request->session()
                ->flash(
                'mensagem',
                "Orçamento atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');

Meu exemplo da aula está assim:

    public function editaNome(int $id, Request $request)
    {
        $novoNome = $request->nome;
        $serie = Serie::find($id);
        $serie->nome = $novoNome;
        $serie->save();
    }

mas como vc pode ver eu mudei a estrutura de código para funcionar de outra forma, no seu caso vc precisaria colocar a mensagem e o redirecionamento no final

    $request->session()
                ->flash(
                'mensagem',
                "Orçamento atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');

minha class Orcamento

<?php

namespace App;

use illuminate\Database\Eloquent\Model;

class Orcamento extends Model
{
    protected $table = 'orcamentos';
    public $timestamps = false;
    protected $fillable =
    [
        'id',
        'codigo',
        'cliente',
        'data',
        'hora',
        'vendedor',
        'valor',
        'descricao'
    ];
}

meu banco

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CriarTabelaOrcamentos extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('orcamentos', function (Blueprint $table){
            $table->increments('id');
            $table->string("codigo");
            $table->string("cliente");
            $table->string("data");
            $table->string("hora");
            $table->string("vendedor");
            $table->string("valor");
            $table->string("descricao");
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('orcamentos');
    }
}
public function editar(Request $request, $id){

        $cadastros = Orcamento::find($request->$id);

        $novoNome = $request->cliente;
        $cadastros ->orcamento = $novoNome;
        $cadastros->save();

        $request->session()
                ->flash(
                'mensagem',
                "Orçamento atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');
    }

eu não entendi direito o q essa function faz por isso não sei se eu to colocando os dados corretamente

mas continua dando esse erro : Attempt to assign property "Orcamento" on null

Certo, vamos tentar mudar o nome do Cliente então, para testar, beleza?

faz assim:

public function editar(Request $request, $id){

// Pegando o nome do Cliente que foi passado pelo request 

        $novoNome = $request->cliente; 

/* Pegando o valor do banco atraves do $id passado por parametro na 
rota:
 (Route::put('cliente/{id}/editar/',[ClienteController::class, 'editar']) do arquivo web.php) 
e trazendo as informações deste dado do banco de dados para manipularmos     */

    $cadastros = Orcamento::find($id); 

        $cadastros ->cliente= $novoNome;
        $cadastros->save();

    $request->session()
                ->flash(
                'mensagem',
                "CLiente atualizado com sucesso"
        );
        return redirect()->route('tabela_orcamentos');
    }

Tente algo parecido com isso

me retorna esse erro aqui : Attempt to assign property "cliente" on null

Rodrigo funcionou eu descobri que o meu id não estava sendo passado corretamente quando eu corrigi isso o codigo funcionou e mudou o nome do meu cliente

tem um jeito de atualizar todos sem que eu tenha que passar parâmetro por parâmetro tipo igual o de adicionar

Opa Ainda bem kk

Da pra fazer sim, ai no caso vc vai ter que criar uma rota nova e uma função no controller quer pegue esses dados enviados por request.

no seu caso vc vai precisar mudar até o HTML, pq em si vc precisa mandar vários dados dos clientes que quer modificar, e armazenando os valores para serem editados haha

da um pouco de trabalho, mas da pra fazer sim! só precisa adaptar o código

Ok vou tentar aqui muito obrigado pela ajuda Rodrigo e pela atenção

tenha um ótimo fim de semana ate mais vlw