getHasManyRowDifferences() public method

Gets current M:N differences
public getHasManyRowDifferences ( ) : array
return array
Exemplo n.º 1
0
 /**
  * Persists changes in M:N relationships
  *
  * @param 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);
         }
     }
 }