public function generateFieldAnnotations($className, $fieldName)
{
$this->classes[$className];
$field = $this->classes[$className]['fields'][$fieldName];
$annotations = [];
if ($field['isEnum']) {
if ($field['isArray']) {
$type = 'simple_array';
} else {
$type = 'string';
}
} else {
switch ($field['range']) {
case 'Boolean':
$type = 'boolean';
break;
case 'Date':
// No break
// No break
case 'DateTime':
$type = 'date';
break;
case 'Time':
$type = 'time';
break;
case 'Number':
// No break
// No break
case 'Float':
$type = 'float';
break;
case 'Integer':
$type = 'integer';
break;
case 'Text':
// No break
// No break
case 'URL':
$type = 'string';
break;
}
}
if (isset($type)) {
if (!$field['isId']) {
$annotation = '@MongoDB\\Field';
if ($field['isArray']) {
$type = 'collection';
}
$annotation .= sprintf('(type="%s")', $type);
$annotations[] = $annotation;
}
} else {
if ($field['cardinality'] === CardinalitiesExtractor::CARDINALITY_0_1 || $field['cardinality'] === CardinalitiesExtractor::CARDINALITY_1_1 || $field['cardinality'] === CardinalitiesExtractor::CARDINALITY_N_0 || $field['cardinality'] === CardinalitiesExtractor::CARDINALITY_N_1) {
$annotations[] = sprintf('@MongoDB\\ReferenceOne(targetDocument="%s", simple=true))', $this->getRelationName($field['range']));
} elseif ($field['cardinality'] === CardinalitiesExtractor::CARDINALITY_0_N || $field['cardinality'] === CardinalitiesExtractor::CARDINALITY_1_N || $field['cardinality'] === CardinalitiesExtractor::CARDINALITY_N_N) {
$annotations[] = sprintf('@MongoDB\\ReferenceMany(targetDocument="%s", simple=true)', $this->getRelationName($field['range']));
}
}
if ($field['isId']) {
$annotations[] = '@MongoDB\\Id';
}
return $annotations;
}