Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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