LeanMapper\Repository::persistHasManyChanges PHP Method

persistHasManyChanges() protected method

Persists changes in M:N relationships
protected persistHasManyChanges ( Entity $entity )
$entity Entity
    protected function persistHasManyChanges(Entity $entity)
    {
        $primaryKey = $this->mapper->getPrimaryKey($this->getTable());
        $idField = $this->mapper->getEntityField($this->getTable(), $primaryKey);
        foreach ($entity->getHasManyRowDifferences() as $key => $difference) {
            list($columnReferencingSourceTable, $relationshipTable, $columnReferencingTargetTable) = explode(':', $key);
            $multiInsert = [];
            foreach ($difference as $value => $count) {
                if ($count > 0) {
                    for ($i = 0; $i < $count; $i++) {
                        $multiInsert[] = [$columnReferencingSourceTable => $entity->{$idField}, $columnReferencingTargetTable => $value];
                    }
                } else {
                    $this->connection->query('DELETE FROM %n WHERE %n = ? AND %n = ? %lmt', $relationshipTable, $columnReferencingSourceTable, $entity->{$idField}, $columnReferencingTargetTable, $value, -$count);
                }
            }
            if (!empty($multiInsert)) {
                $this->connection->query('INSERT INTO %n %ex', $relationshipTable, $multiInsert);
            }
        }
    }