Ejemplo n.º 1
0
 /**
  * @param $modifiedManyManyRelations
  * @param $primaryKey
  */
 private function updateManyToManyRelations($modifiedManyManyRelations, $primaryKey)
 {
     $queryBuilder = $this->manager->getDriver()->getQueryBuilder();
     $tableName = $this->getTable();
     foreach ($modifiedManyManyRelations as $relationName => $keys) {
         /** @var Relation\ManyToMany $relation */
         $relation = $this->getRelation($relationName);
         $joinTable = $relation->getJoinTable();
         $relatedTableName = $relation->getEntity()->getTable();
         $leftKey = $tableName . '_' . $relation->getForeignKey();
         $rightKey = $relatedTableName . '_' . $relation->getTargetKey();
         if (!empty($keys['deleted'])) {
             $expression = $queryBuilder->expression();
             $queryBuilder->delete($joinTable)->where($expression->eq($leftKey, $queryBuilder->createPositionalParameter($primaryKey))->andX($expression->eq($rightKey, $queryBuilder->createPositionalParameter($keys['deleted']))))->query();
         }
         if (!empty($keys['inserted'])) {
             $insertQuery = $queryBuilder->insert($joinTable)->values([$leftKey => $queryBuilder->createPositionalParameter($primaryKey), $rightKey => '?']);
             foreach ($keys['inserted'] as $foreignKey) {
                 $insertQuery->query([1 => $foreignKey]);
             }
         }
     }
 }