• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

phpolar / model / 15338053003

30 May 2025 02:46AM UTC coverage: 90.391%. First build
15338053003

Pull #122

github

web-flow
Merge 2b12e33c7 into 548609d0b
Pull Request #122: 121 add json modelresolver

11 of 14 new or added lines in 6 files covered. (78.57%)

254 of 281 relevant lines covered (90.39%)

3.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/DataTypeDetectionTrait.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Phpolar\Model;
6

7
use Phpolar\StorageDriver\DataTypeUnknown;
8
use Phpolar\StorageDriver\StorageDriverInterface;
9
use Phpolar\StorageDriver\TypeName;
10
use ReflectionProperty;
11
use ReflectionNamedType;
12
use Stringable;
13

14
/**
15
 * Provides support for configuring column parameters used to create tables.
16
 */
17
trait DataTypeDetectionTrait
18
{
19
    /**
20
     * Uses the property type to determine the data type type.
21
     *
22
     * @api
23
     */
24
    public function getDataType(
25
        string $propName,
26
        StorageDriverInterface $storageDriver
27
    ): Stringable|DataTypeUnknown {
28
        $property = new ReflectionProperty($this, $propName);
5✔
29
        $propertyType = $property->getType();
5✔
30
        if ($propertyType instanceof ReflectionNamedType) {
5✔
31
            return $this->getDataTypeFromDeclaredProperty($propertyType, $storageDriver);
2✔
32
        }
33
        return $this->getDataTypeFromNotDeclaredProperty($property, $storageDriver);
3✔
34
    }
35

36
    private function getDataTypeFromDeclaredProperty(
37
        ReflectionNamedType $propertyType,
38
        StorageDriverInterface $storageDriver,
39
    ): Stringable|DataTypeUnknown {
40
        $propertyTypeName = $propertyType->getName();
2✔
41
        $typeName = parseTypeName($propertyTypeName);
2✔
42
        return match ($typeName) {
43
            TypeName::Invalid => new DataTypeUnknown(),
2✔
44
            default => $storageDriver->getDataType($typeName),
2✔
45
        };
46
    }
47

48
    private function getDataTypeFromNotDeclaredProperty(
49
        ReflectionProperty $property,
50
        StorageDriverInterface $storageDriver,
51
    ): Stringable|DataTypeUnknown {
52
        if ($property->isInitialized($this) === true) {
3✔
53
            $value = $property->getValue($this);
3✔
54

55
            if (is_object($value) === false) {
3✔
56
                return $storageDriver->getDataType(parseTypeName(gettype($value)));
2✔
57
            }
58

59
            if ($this->isInstanceOfDateTime($value) === true) {
2✔
60
                return $storageDriver->getDataType(TypeName::T_DateTime);
1✔
61
            }
62
        }
63
        return new DataTypeUnknown();
1✔
64
    }
65

66
    private function isInstanceOfDateTime(object $value): bool
67
    {
68
        return in_array(get_class($value), ["DateTimeImmutable", "DateTime"]);
2✔
69
    }
70
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc