Skip to content

Commit ac021fd

Browse files
committed
Allow to use Column attribute on Class
1 parent b66e624 commit ac021fd

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/Attributes/Column.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Composite\Sync\Attributes;
44

5-
#[\Attribute(\Attribute::TARGET_PARAMETER | \Attribute::TARGET_PROPERTY)]
5+
#[\Attribute(\Attribute::TARGET_PARAMETER | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_CLASS)]
66
class Column
77
{
88
public function __construct(

src/Providers/AbstractSQLColumn.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
namespace Composite\Sync\Providers;
44

55
use Composite\Entity\Columns\AbstractColumn;
6+
use Composite\Entity\Columns\CastableColumn;
7+
use Composite\Entity\Columns\EntityColumn;
8+
use Composite\Sync\Attributes\Column;
69

710
abstract class AbstractSQLColumn
811
{
@@ -50,4 +53,20 @@ public function getColumnAttributeProperties(): array
5053
}
5154
return $result;
5255
}
56+
57+
public static function getColumnAttribute(AbstractColumn $entityColumn): ?Column
58+
{
59+
if ($attribute = $entityColumn->getFirstAttributeByClass(Column::class)) {
60+
return $attribute;
61+
}
62+
$columnIsClass = $entityColumn instanceof CastableColumn || $entityColumn instanceof EntityColumn;
63+
if (!$columnIsClass) {
64+
return null;
65+
}
66+
$reflection = new \ReflectionClass($entityColumn->type);
67+
foreach ($reflection->getAttributes(Column::class) as $attribute) {
68+
return $attribute->newInstance();
69+
}
70+
return null;
71+
}
5372
}

src/Providers/MySQL/MySQLColumn.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public function __construct(
5959
*/
6060
public static function fromEntityColumn(AbstractColumn $entityColumn): self
6161
{
62-
$columnAttribute = $entityColumn->getFirstAttributeByClass(Column::class);
62+
$columnAttribute = self::getColumnAttribute($entityColumn);
6363
$primaryKeyAttribute = $entityColumn->getFirstAttributeByClass(PrimaryKey::class);
6464
$isAutoIncrement = $primaryKeyAttribute?->autoIncrement ?? false;
6565
$type = $columnAttribute?->type ?

0 commit comments

Comments
 (0)