Jean Silva
Criador Jean Silva 03/08/2022

Olá Professor, boa tarde!

Poderia me ajudar por favor?.

Tenho um projeto que precisei incluir uma nova funcionalidade, upload de arquivos, criei uma nova seção dentro do projeto que serirá de portfolio para esses projetos a qual irá inserir os arquivos como pdf, imgs e etc...

Criei uma nova tabela: upload_file_projects, com os seguines campos abaixo:

O campo project_id, fiz uma constrained projects, pois quero que os arquivos sejam apenas desse projeto, ou seja um projeto pode ter muitos arquivos, e o arquivo deve pertencer ao project, atualmente funciona do jeito que eu fiz no controller, portanto ao deletar, não consigo fazer um cascade, deletar na tabela project e assim deletando também os arquivos referente a aquele projeto, está correto do jeito abaixo?.

Migration:

   Schema::create('upload_file_projects', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('project_id')->constrained('projects');
            $table->string('name');
            $table->string('user_id', 128)->nullable();
            $table->timestamps();
        });
    }

Controller Fc Show:

 $this->authorize('view', $UploadFileProject);
        $UploadFileProject = UploadFileProject::where('project_id', $id)->get();
        return UploadFileResource::collection($UploadFileProject);

Thanks.

Criador Jean Silva 03/08/2022

Model Project:

  public function uploadFileProjects(){

        return $this->hasMany(UploadFileProject::class);
    }

Model UploadFileProject:

protected $fillable = ['user','project_id','name','user_id'];


    public function project(){

        return $this->belongsTo(Project::class);

    }

Controller Project Destroy:

 public function destroy(UploadFileProject $project)
    {
        $this->authorize('delete', $project);
        $project->programmingLanguages()->detach();
        if ($project->delete()) {
            $this->deleteFile($project->project_id->manual);
            return new ProjectResource($project);
        }
    }

 

Jean Silva
Luan de Melo Martins 03/08/2022

Olá, amigo> muito porovavelmente não funciona pois vc não colocou a função onDelete('cascade'). Assim a aplicação mantém por default a não exclusão dos registros. 

Veja esse link. Acredito que ele poderá te ajudar: https://stackoverflow.com/questions/26820788/add-on-delete-cascade-to-existing-column-in-laravel

Luan de Melo Martins
Manager Carlos Ferreira 03/08/2022

Olá, Jean!
Tudo bem?

Ajudo sim, claro.

Entendo, sua ideia é deletar em cascata justamente para evitar registros órfãos no banco.

Faltou fazer isso mesmo que o nosso amigo Luan disse, incluir o ->onDelete('cascade') na coluna.

E também se o banco for MySQL, se o mode strict estiver habilitado, não vai permitir deletar em cascata;

Carlos Ferreira
Criador Jean Silva 03/08/2022

Showww, obrigado a todos.

Jean Silva
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!