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

$request->coverPath não é armazenado no banco

Olá, estou com um problema ao armazenar o coverPath no banco de dados. A série é armazenada normalmente, porém, a coluna cover_path sempre está nula. No SeriesController faço os testes e o coverPath está correto, mas ao enviar pro EloquentSeriesRepository, ao testar com um dd($request->coverPath); o retorno é null. Não sei qual pode ser o problema, já que no controller está funcionando corretamente. Segue o código para analisarem

Controller

    public function store(SeriesFormRequest $request)
    {
        $serie = $this->repository->add($request);
        $fileType = $request->file('cover')->getMimeType();

        //Este if valida se o formato de capa recebido é em .gif, .png e .jpeg
        if($fileType === 'image/gif' || $fileType === 'image/png' || $fileType === 'image/jpeg'){
            $coverPath = $request->file('cover')->store('series_cover', 'public');
            $request->coverPath = $coverPath;
        }

        //Neste DD o coverPath está com os valores corretos
        //mas no EloquentSeriesRepository ele é recebido como NULL
        //dd($request->coverPath);

        SeriesCreatedEvent::dispatch(
          $serie->nome,
          $serie->id,
          $request->seasonsQty,
          $request->episodesPerSeason,  
        );

        return to_route('series.index')
            ->with('mensagem.sucesso', "Série '{$serie->nome}' adicionada com sucesso");
    }

EloquentSeriesRepository

public function add (SeriesFormRequest $request): Series
    {
        //Neste dd o retorno é null
        //dd($request->coverPath);

        return DB::transaction(function () use ($request) {
            $serie = Series::create([
                'nome' => $request->nome,
                'cover_path' => $request->coverPath,
            ]);

            $seasons = [];
            for ($i = 1; $i <= $request->seasonsQty; $i++) {
                $seasons[] = [
                    'series_id' => $serie->id,
                    'number' => $i,
                ];
            }
            Season::insert($seasons);

            $episodes = [];
            foreach ($serie->seasons as $season) {
                for ($j = 1; $j <= $request->episodesPerSeason; $j++) {
                    $episodes[] = [
                        'season_id' => $season->id,
                        'number' => $j
                    ];
                }
            }
            Episode::insert($episodes);

            return $serie;
        });
    }

Aproveitando o problema que encontrei, o desafio de validar no Controller se o arquivo do upload é válido está correto, ou ainda não seria a forma ideal de verificar?

2 respostas
solução!

Mas João, você está chamando o add do repositório antes de adicionar a propriedade coverPath.

Sobre a validação, não está errado, mas eu usaria uma regra de validação no FormRequest: https://laravel.com/docs/9.x/validation#rule-image

Realmente, fiquei procurando o erro em tantos lugares que nem havia percebido que o problema estava no add antes da adição da propriedade. Meu Deus... hahaha

Quando a validação, fiz no form request com a inclusão do atributo 'cover' e adicionando 'cover' => ['mimes:mimes:jpeg,png,jpg,gif'],

Muito obrigado Vinicius, e parabéns pelas aulas, estão ótimas.