addSql('CREATE UNIQUE INDEX participation_unique ON chill_person_accompanying_period_participation (accompanyingperiod_id, person_id)'); } public function getDescription(): string { return 'Custom constraint added to database to prevent identical participations.'; } public function up(Schema $schema): void { // creates a constraint 'participations may not overlap' $this->addSql('ALTER TABLE chill_person_accompanying_period_participation ADD CONSTRAINT ' . 'participations_no_overlap EXCLUDE USING GIST( -- extension btree_gist required to include comparaison with integer person_id WITH =, accompanyingperiod_id WITH =, daterange(startdate, enddate) WITH && ) INITIALLY DEFERRED'); } }