1
resposta

[Dúvida] Eu não consegui entender muito bem a explicação sobre o destroy, queria saber se o que pensei está correto.


<?php

namespace App\Http\Controllers;
use Illuminate\View\View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Series;
use App\Models\Serie;


class SeriesController extends Controller
{
    public function index(Request $request)
    {

        $series = Serie::query()
            ->orderBy('nome')
            ->get();

        $mensagemSucesso = $request->session()->get('mensagem.sucesso');

        return view('series.index')
            ->with('series', $series)
            ->with('mensagemSucesso', $mensagemSucesso);

        
    }

    public function create()
    {
        return view('series.create');
    }

    public function store(Request $request)
    {
        
        $nomeSerie = Serie::create($request->all());
        $request->session()->flash('mensagem.sucesso', "{$nomeSerie -> nome} adiciona com sucesso");
        return to_route('series.index');
        
    }

    public function destroy(Serie $series, Request $request)
    {

        $series->delete();
        $request->session()->flash('mensagem.sucesso', 'Série removida com sucesso');

        return to_route('series.index');
    }
}

Nesse método destroy estou chamando o objeto $series do nosso model Serie, variável essa sendo criada na nossa index atráves da query, então quando a variável segue a Model ela obtêm acesso a aquele método delete?

1 resposta

Oi Sergio! Tudo bem?

No método destroy, você está recebendo um objeto Serie diretamente como parâmetro, graças ao recurso de model binding do Laravel. Isso significa que o Laravel automaticamente busca no banco de dados a instância da Serie correspondente ao ID passado na rota e a injeta no método. Então, sim, quando você recebe $series como parâmetro, ele já é uma instância do modelo Serie e você pode chamar o método delete() diretamente sobre ele.

Aqui está um exemplo prático de como isso funciona:

  1. Suponha que você tenha uma rota definida assim: Route::delete('/series/{series}', [SeriesController::class, 'destroy']);

  2. Quando você faz uma requisição DELETE para /series/1, o Laravel automaticamente busca a série com ID 1 e passa essa instância para o método destroy.

  3. Dentro do método destroy, você pode usar $series->delete() para remover a série do banco de dados.

Dessa forma, você tem acesso a todos os atributos da série, como o nome, antes de deletá-la, permitindo que você exiba mensagens personalizadas, como "Série 'Nome da Série' removida com sucesso".

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.