id(); $table->string('ticket_id')->unique()->index(); $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); $table->foreignId('connected_app_id')->nullable()->constrained('connected_apps')->cascadeOnDelete(); $table->string('issue_category'); $table->text('description')->nullable(); $table->foreignId('status_id')->constrained('ticket_statuses')->restrictOnDelete(); $table->softDeletes(); $table->timestamps(); }); Schema::create('ticket_notified_roles', function (Blueprint $table): void { $table->id(); $table->foreignId('ticket_id')->constrained('tickets')->cascadeOnDelete(); $table->foreignId('role_id')->comment('role_id from Spatie roles table'); $table->unique(['ticket_id', 'role_id']); }); Schema::create('ticket_notified_users', function (Blueprint $table): void { $table->id(); $table->foreignId('ticket_id')->constrained('tickets')->cascadeOnDelete(); $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); $table->unique(['ticket_id', 'user_id']); }); Schema::create('ticket_attachments', function (Blueprint $table): void { $table->id(); $table->foreignId('ticket_id')->constrained('tickets')->cascadeOnDelete(); $table->string('file_path'); $table->string('file_name'); $table->unsignedBigInteger('file_size'); $table->string('mime_type'); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('ticket_attachments'); Schema::dropIfExists('ticket_notified_users'); Schema::dropIfExists('ticket_notified_roles'); Schema::dropIfExists('tickets'); } };