id(); $table->string('name'); $table->string('slug')->unique(); $table->boolean('is_personal')->default(false); $table->timestamps(); $table->softDeletes(); }); Schema::create('team_members', function (Blueprint $table) { $table->id(); $table->foreignId('team_id')->constrained()->cascadeOnDelete(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('role'); $table->timestamps(); $table->unique(['team_id', 'user_id']); }); Schema::create('team_invitations', function (Blueprint $table) { $table->id(); $table->string('code', 64)->unique(); $table->foreignId('team_id')->constrained()->cascadeOnDelete(); $table->string('email'); $table->string('role'); $table->foreignId('invited_by')->constrained('users')->cascadeOnDelete(); $table->timestamp('expires_at')->nullable(); $table->timestamp('accepted_at')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('team_invitations'); Schema::dropIfExists('team_members'); Schema::dropIfExists('teams'); } };