ulmus/src/Common/EntityField.php

76 lines
1.9 KiB
PHP
Raw Normal View History

2019-08-21 20:13:00 +00:00
<?php
namespace Ulmus\Common;
2020-10-16 15:27:54 +00:00
use Ulmus\Annotation\Annotation;
use Ulmus\Migration\FieldDefinition;
use Ulmus\Ulmus,
Ulmus\Adapter\AdapterInterface,
Ulmus\Annotation\Property\Field;
2019-08-21 20:13:00 +00:00
class EntityField
{
public string $name;
public string $entityClass;
public string $alias;
protected EntityResolver $entityResolver;
public function __construct(string $entityClass, string $name, string $alias, EntityResolver $resolver)
2019-08-21 20:13:00 +00:00
{
$this->entityClass = $entityClass;
$this->name = $name;
$this->alias = $alias;
$this->entityResolver = $resolver;
}
2019-08-21 20:13:00 +00:00
public function name($useAlias = true) : string
{
$name = $this->entityResolver->searchFieldAnnotation($this->name, new Field() )->name ?? $this->name;
2020-10-16 15:27:54 +00:00
$name = $this->entityResolver->databaseAdapter()->adapter()->escapeIdentifier($name, AdapterInterface::IDENTIFIER_FIELD);
return $useAlias ? "{$this->alias}.$name" : $name;
2019-08-21 20:13:00 +00:00
}
public static function isScalarType($type) : bool
{
switch($type) {
case 'int':
case 'bool':
case 'string':
case 'float':
case 'double':
return true;
}
return false;
}
2020-10-16 15:27:54 +00:00
public static function generateCreateColumn($field) : string
{
$definition = new FieldDefinition($field);
# column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
return implode(" ", [
$definition->getSqlName(),
$definition->getSqlType(),
$definition->getSqlParams(),
2020-10-16 15:27:54 +00:00
]);
}
2019-08-21 20:13:00 +00:00
public static function isObjectType($type) : bool
{
# @Should be fixed with isBuiltIn() instead, it won't be correct based only on name
# return strpos($type, "\\") !== false;
2019-08-21 20:13:00 +00:00
}
public function __toString() : string
{
return $this->name();
}
}