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);
}
}
}