Storm\Drivers\Base\Relational\Relations\JoinTableRelation::Persist PHP Method

Persist() public method

public Persist ( Transaction $Transaction, ResultRow $ParentData, array $RelationshipChanges )
$Transaction Storm\Core\Relational\Transaction
$ParentData Storm\Core\Relational\ResultRow
$RelationshipChanges array
    public function Persist(Relational\Transaction $Transaction, Relational\ResultRow $ParentData, array $RelationshipChanges)
    {
        /* @var $RelationshipChanges Relational\RelationshipChange[] */
        $JoinRowsWithoutPrimaryKeys = [];
        foreach ($RelationshipChanges as $RelationshipChange) {
            if ($RelationshipChange->HasPersistedRelationship()) {
                $JoinRow = $this->MapPersistedRelationshipToJoinRow($RelationshipChange->GetPersistedRelationship());
                $Transaction->Persist($JoinRow);
                if (!$JoinRow->HasPrimaryKey()) {
                    $JoinRowsWithoutPrimaryKeys[] = $JoinRow;
                }
            }
            if ($RelationshipChange->HasDiscardedRelationship()) {
                $JoinRow = $this->MapDiscardedRelationshipToJoinRow($RelationshipChange->GetDiscardedRelationship());
                $Transaction->Discard($JoinRow->GetPrimaryKey());
            }
        }
        if (count($JoinRowsWithoutPrimaryKeys) > 0) {
            $ParentRow = $ParentData->GetRow($this->ParentForeignKey->GetReferencedTable());
            $Transaction->SubscribeToPrePersistEvent($this->JoinTable, function () use(&$ParentRow, &$JoinRowsWithoutPrimaryKeys) {
                foreach ($JoinRowsWithoutPrimaryKeys as $JoinRowWithoutPrimaryKey) {
                    $this->ParentForeignKey->MapReferencedToParentKey($ParentRow, $JoinRowWithoutPrimaryKey);
                }
            });
        }
    }