classForeignKeyDefinition
final class ForeignKeyDefinition
One foreign key: which columns point where, and what happens when the parent moves.
Properties§
public non-empty-list<string> $columnspublic string $referencedTablepublic list<string> $referencedColumnspublic ReferentialAction $onDelete = ReferentialAction::NoActionpublic ReferentialAction $onUpdate = ReferentialAction::NoActionMethods§
public function __construct(
public non-empty-list<string> $columns,
public string $referencedTable,
public list<string> $referencedColumns,
public ReferentialAction $onDelete = ReferentialAction::NoAction,
public ReferentialAction $onUpdate = ReferentialAction::NoAction,
)Parameters
$columns | non-empty-list<string> | |
$referencedTable | string | |
$referencedColumns | list<string> | |
$onDelete | ReferentialAction | |
$onUpdate | ReferentialAction |
Calls 1
- class-const ReferentialAction::NoAction() line 20
Test cases 63§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 1
Other tests reaching this symbol 62
DefinitionBuilderTest::testBuildcallsDefinitionEntryTest::testParseEntrycallsTableDefinitionTest::testKeepsEverythingATableDeclaresAboutItselfcallsSessionTest::testForeignKeyFailureRestoresShadowStatecallsFollowedConstraintTest::testCarriesWhatIsNeededToFollowAKeyAndToRefuseItcallsForeignKeyCascadeTest::testApplyActionCarriesTheNewValueWhereTheActionSaysToCascadecallsForeignKeyCascadeTest::testApplyActionRefusesTheStatementWhereTheActionForbidsItcallsForeignKeyCascadeTest::testApplyActionSetsTheKeyToNullWhereTheActionSaysTocallsForeignKeyCascadeTest::testCarryDeleteDropsEveryChildThatWasHoldingTheKeyWhereTheActionCascadescallsForeignKeyCascadeTest::testCarryDeleteReachesNothingWhereTheParentTableStillHoldsTheKeycallsForeignKeyCascadeTest::testCarryDeleteSetsTheKeyToNullWhereTheActionSaysToRatherThanDroppingTheRowcallsForeignKeyCascadeTest::testCarryUpdateReachesNothingWhereTheParentTableStillHoldsTheOldKeycallsForeignKeyCascadeTest::testCarryUpdateWritesTheNewKeyIntoEveryChildThatWasHoldingTheOldOnecallsForeignKeyCascadeTest::testOfCarriesTheNewKeyToTheChildrenOfAnUpdatedParentcallsForeignKeyCascadeTest::testOfDeletesTheChildrenOfADeletedParentWhereTheActionSaysToCascadecallsForeignKeyCascadeTest::testOfFollowsNothingThroughAKeyWhoseEndsDisagreecallsForeignKeyCascadeTest::testOfLeavesTheChildrenAloneWhileAnotherParentRowHoldsTheKeyUpcallsForeignKeyEndsTest::testAreBalancedIsFalseWhereTheEndsDisagreecallsForeignKeyEndsTest::testAreBalancedWhenBothEndsNameTheSameNumberOfColumnscallsForeignKeyEndsTest::testReferencedColumnsAnswersTheColumnsTheKeyNamescallsForeignKeyEndsTest::testReferencedColumnsFallsBackToTheParentsPrimaryKeycallsForeignKeyEndsTest::testReferencedColumnsIsEmptyWhereTheParentIsUnknowncallsForeignKeyIntegrityTest::testAssertHoldsChecksNothingThroughAKeyWhoseEndsDisagreecallsForeignKeyIntegrityTest::testAssertHoldsLeavesAKeyWithANullInItAlonecallsForeignKeyIntegrityTest::testAssertHoldsLeavesARowThatDoesNotCarryTheKeyColumnsAlonecallsForeignKeyIntegrityTest::testAssertHoldsPassesAShadowInWhichEveryChildFindsItsParentcallsForeignKeyIntegrityTest::testAssertHoldsRefusesAShadowInWhichAChildReferencesNothingcallsDataMutationTest::testAMutationThatChangesNoRowsCarriesNothingToTheChildrencallsDataMutationTest::testAMutationThatChangesRowsCarriesItsConsequencesToTheChildrencallsColumnDefinitionEditorTest::testRenamedForeignKeyPreservesReferencedRelationAndActionscallsCreateTableRendererTest::testBuildCreateTableSqlWithCompositeAndForeignKeyscallsDropColumnResolverTest::testDefinitionWithoutColumnRemovesAllDependentMetadatacallsRenameResolverTest::testDefinitionWithRenamedColumnUpdatesKeyAndValueMapscallsReferentialIntegrityEnforcerTest::testAcceptsExplicitReferenceToNonPrimaryCandidateKeycallsReferentialIntegrityEnforcerTest::testCascadeNormalizesSparseChildRowIndexescallsReferentialIntegrityEnforcerTest::testCompositeDeleteSetNullNormalizesEveryForeignKeyColumncallsReferentialIntegrityEnforcerTest::testCompositePrimaryKeyUpdateCascadesOnlyMatchingChildrencallsReferentialIntegrityEnforcerTest::testDeleteCascadePropagatesAcrossMultipleLevelscallsReferentialIntegrityEnforcerTest::testDeleteCascadeRemovesAllMatchingChildrenAndKeepsOtherscallsReferentialIntegrityEnforcerTest::testDeleteRestrictRejectsParentRemovalcallsReferentialIntegrityEnforcerTest::testDeleteSetNullCarriesOriginalRowIntoNextLevelcallsReferentialIntegrityEnforcerTest::testDeleteSetNullUpdatesChildcallsReferentialIntegrityEnforcerTest::testEmptySelfReferentialCascadeTerminatesWithoutSyntheticEventscallsReferentialIntegrityEnforcerTest::testExplicitReferencedColumnsAreNotReplacedByPrimaryKeycallsReferentialIntegrityEnforcerTest::testFallbackContinuesAfterIdentityMatchedRowcallsReferentialIntegrityEnforcerTest::testFallbackReferencedPrimaryKeyAppearsInUpdateViolationcallsReferentialIntegrityEnforcerTest::testFallbackTransitionPropagatesUpdateAndDeleteFromOneTablecallsReferentialIntegrityEnforcerTest::testIdentityTransitionSkipsIncompleteChangeAndProcessesFollowingChangecallsReferentialIntegrityEnforcerTest::testMatchingConstraintAfterUnrelatedConstraintStillCascadescallsReferentialIntegrityEnforcerTest::testMissingReferencedValuesDoNotStopLaterUpdateOrDeleteCascadescallsReferentialIntegrityEnforcerTest::testMultiTruncateCascadesFromEveryChangedParentTablecallsReferentialIntegrityEnforcerTest::testPrimaryKeyUpdateCascadesThroughOriginalRowIdentitycallsReferentialIntegrityEnforcerTest::testRejectsInsertWhoseParentDoesNotExistcallsReferentialIntegrityEnforcerTest::testRetainedOldKeyDoesNotStopFollowingUpdateCascadecallsReferentialIntegrityEnforcerTest::testSchemaMutationDoesNotTriggerRowValidationcallsReferentialIntegrityEnforcerTest::testSchemaMutationSkipsRowIntegrityCheckscallsReferentialIntegrityEnforcerTest::testSynchronizeCascadesDeletedRowscallsReferentialIntegrityEnforcerTest::testUpdateCascadeCarriesOriginalRowIntoNextLevelcallsReferentialIntegrityEnforcerTest::testUpdateDoesNotCascadeWhileOldParentKeyStillExistscallsReferentialIntegrityEnforcerTest::testValidationContinuesPastMissingAndNullForeignKeyscallsSqliteMutationResolverTest::testAlterAddColumnPreservesExistingAndAddedForeignKeyscallsSqliteMutationResolverTest::testAlterColumnMutationsPreserveRenameAndRemoveForeignKeyscalls
Relations§
Instantiated in 4
- new ZtdQuery\Platform\MySql\Schema\Key\DefinitionReader::parseEntry() packages/ztd-query-mysql/src/Schema/Key/DefinitionReader.php:93
- new ZtdQuery\Platform\Postgres\Schema\Key\DefinitionEntry::parseEntry() packages/ztd-query-postgres/src/Schema/Key/DefinitionEntry.php:55
- new ZtdQuery\Platform\Sqlite\Schema\Key\ForeignKeyEntryParser::parseEntry() packages/ztd-query-sqlite/src/Schema/Key/ForeignKeyEntryParser.php:55
- new ZtdQuery\Platform\Sqlite\Shadow\Mutation\Table\Alter\ColumnDefinitionEditor::renamedForeignKey() packages/ztd-query-sqlite/src/Shadow/Mutation/Table/Alter/ColumnDefinitionEditor.php:67
Type declarations 8
- type ZtdQuery\Shadow\FollowedConstraint packages/ztd-query-core/src/Shadow/FollowedConstraint.php:28
- type ZtdQuery\Shadow\ForeignKeyCascade packages/ztd-query-core/src/Shadow/ForeignKeyCascade.php:63
- type ZtdQuery\Shadow\ForeignKeyEnds packages/ztd-query-core/src/Shadow/ForeignKeyEnds.php:33
- type ZtdQuery\Shadow\ForeignKeyEnds packages/ztd-query-core/src/Shadow/ForeignKeyEnds.php:57
- type ZtdQuery\Platform\Sqlite\Shadow\Mutation\Table\Alter\ColumnDefinitionEditor packages/ztd-query-sqlite/src/Shadow/Mutation/Table/Alter/ColumnDefinitionEditor.php:57
- type ZtdQuery\Platform\Sqlite\Shadow\Mutation\Table\Alter\ColumnDefinitionEditor packages/ztd-query-sqlite/src/Shadow/Mutation/Table/Alter/ColumnDefinitionEditor.php:58
- type ZtdQuery\Platform\Sqlite\Shadow\Mutation\Table\Alter\DropColumnResolver::definitionWithoutColumn() packages/ztd-query-sqlite/src/Shadow/Mutation/Table/Alter/DropColumnResolver.php:71
- type ZtdQuery\Platform\Sqlite\Shadow\Mutation\Table\Alter\RenameResolver::definitionWithRenamedColumn() packages/ztd-query-sqlite/src/Shadow/Mutation/Table/Alter/RenameResolver.php:111