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

[Dúvida] Métodos PUT e DELETE só funcionam pelo objeto $series

Seguindo o roteiro da aula 09 do tópico 2 de construção de API's com Laravel, o instrutor sugere que façamos a atualização e a exclusão de dados via API através de chamada estática dos respectivos métodos da classe Series, ao invés de utilizar via objeto passado como parâmetro no método.

O que acontece é que dessa forma não acontece nada quando testo via Postman. Comentando o fonte da classe e usando o objeto, daí funciona. Por que isso acontece?

(assim funciona)

public function update(Series $series, SeriesFormRequest $request)
    {
        $series->fill($request->all());
        $series->save();

        return $series;
    }

    public function destroy(Series $series)
    {
        $series->delete();
        return response()->noContent();
    }

(assim NÃO funciona)

public function update(Series $series, SeriesFormRequest $request)
    {
        Series::where('id', $series)->update($request->all());

        return $series;
    }

    public function destroy(Series $series)
    {
        Series::destroy($series);
        return response()->noContent();
    }
4 respostas

Porque você está usando o tipo errado. Não é para tipar como Series e sim como int.

No caso, na resposta do endpoint se enviava $series pois era objeto da Model Series.

Adaptei a saída conforme sua solução de update, seria isso?

public function update(int $series, SeriesFormRequest $request)
    {
        Series::where('id', $series)->update($request->all());

        return Series::where('id', $series)->get();
    }

Exatamente.

solução!

Daniel, a sugestão dada no minuto 2:35 da aula que você citou é somente para o método de remoção de série. Seu método de atualização continua fazendo 2 queries, mas agora ficou mais complexo, ou seja, não vale a pena essa alteração.

Se você quer fazer somente 1 query e continuar retornando a série atualizada, uma opção seria a seguinte:

public function update(int $series, SeriesFormRequest $request)
{
    Series::where('id', $series)->update($request->all());

    return new Series(['id' => $series, 'nome' => $request->nome]);
}

Assim só vai haver 1 query