public function testGetColumnName() { $cm = $this->createClassMetadata('Doctrine\\Tests\\Models\\CMS\\CmsUser'); $cm->mapField(array('fieldName' => 'name', 'columnName' => '`name`')); $cm->mapField(array('fieldName' => 'id', 'columnName' => 'id')); $this->assertEquals('id', $this->strategy->getColumnName('id', $cm, $this->platform)); $this->assertEquals('"name"', $this->strategy->getColumnName('name', $cm, $this->platform)); }
/** * @param ClassMetadata $meta * * @return string * @throws \Doctrine\DBAL\DBALException */ private function getRevisionSQL($meta) { if (!isset($this->revisionSQL[$meta->name])) { $placeholders = ['?', '?']; $values = ['revision_id', 'rev_type']; $updates = ['rev_type']; $tableName = $this->getTableName($meta); $fields = array(); foreach ($meta->associationMappings as $field => $assoc) { if ($meta->isInheritanceTypeJoined() && $meta->isInheritedAssociation($field)) { continue; } if (!$this->annotationReader->isPropertyRevised($meta->name, $field)) { continue; } if (($assoc['type'] & ClassMetadata::TO_ONE) > 0 && $assoc['isOwningSide']) { foreach ($assoc['targetToSourceKeyColumns'] as $sourceCol) { $fields[$sourceCol] = true; $values[] = $sourceCol; $placeholders[] = '?'; } } } foreach ($meta->fieldNames as $field) { if (array_key_exists($field, $fields)) { continue; } if ($meta->isInheritanceTypeJoined() && $meta->isInheritedField($field) && !$meta->isIdentifier($field)) { continue; } if (!$this->annotationReader->isPropertyRevised($meta->name, $field) && !$meta->isIdentifier($field)) { continue; } $type = Type::getType($meta->fieldMappings[$field]['type']); $placeholders[] = !empty($meta->fieldMappings[$field]['requireSQLConversion']) ? $type->convertToDatabaseValueSQL('?', $this->platform) : '?'; $quoteStrategy = new DefaultQuoteStrategy(); $values[] = $quoteStrategy->getColumnName($field, $meta, $this->platform); $updates[] = $quoteStrategy->getColumnName($field, $meta, $this->platform); } if ($meta->isInheritanceTypeJoined() && $meta->rootEntityName == $meta->name) { $values[] = $meta->discriminatorColumn['name']; $updates[] = $meta->discriminatorColumn['name']; $placeholders[] = '?'; } $sql = "INSERT INTO " . $tableName . " (" . implode(", ", $values); $sql .= ") VALUES (" . implode(", ", $placeholders) . ")"; $sql .= " ON DUPLICATE KEY UPDATE "; array_walk($updates, function (&$value) { $value = sprintf("%s=VALUES(%s)", $value, $value); }); $sql .= implode(", ", $updates); $this->revisionSQL[$meta->name] = $sql; } return $this->revisionSQL[$meta->name]; }