/** * Returns true if at least one of the local columns of $fk is not already covered by another * foreignKey in our collection (getCrossForeignKeys) * * E.g. * * table (local primary keys -> foreignKey): * * pk1 -> FK1 * pk2 * \ * -> FK2 * / * pk3 -> FK3 * \ * -> FK4 * / * pk4 * * => FK1(pk1), FK2(pk2, pk3), FK3(pk3), FK4(pk3, pk4). * * isAtLeastOneLocalPrimaryKeyNotCovered(FK1) where none fks in our collection: true * isAtLeastOneLocalPrimaryKeyNotCovered(FK2) where FK1 is in our collection: true * isAtLeastOneLocalPrimaryKeyNotCovered(FK3) where FK1,FK2 is in our collection: false * isAtLeastOneLocalPrimaryKeyNotCovered(FK4) where FK1,FK2 is in our collection: true * * @param ForeignKey $fk * @return bool */ public function isAtLeastOneLocalPrimaryKeyNotCovered(ForeignKey $fk) { $primaryKeys = $fk->getLocalPrimaryKeys(); foreach ($primaryKeys as $primaryKey) { $covered = false; foreach ($this->getCrossForeignKeys() as $crossFK) { if ($crossFK->hasLocalColumn($primaryKey)) { $covered = true; break; } } //at least one is not covered, so return true if (!$covered) { return true; } } return false; }