Skip to content

Commit e3e5b65

Browse files
committed
fix: generating specs on laravel 11
1 parent 97215d3 commit e3e5b65

File tree

4 files changed

+51
-46
lines changed

4 files changed

+51
-46
lines changed

src/Specs/Builders/Components/Model/BaseModelComponentBuilder.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ protected function getPropertiesFromSchema(Model $resourceModel, array $excluded
4848

4949
return collect($columns)
5050
->filter(
51-
function (Column $column) use ($excludedColumns) {
52-
return !in_array($column->getName(), $excludedColumns, true);
51+
function (array $column) use ($excludedColumns) {
52+
return !in_array($column['name'], $excludedColumns, true);
5353
}
5454
)->filter(
55-
function (Column $column) use ($resourceModel) {
56-
return $resourceModel->isFillable($column->getName());
55+
function (array $column) use ($resourceModel) {
56+
return $resourceModel->isFillable($column['name']);
5757
}
5858
)->map(
59-
function (Column $column) use ($resourceModel) {
59+
function (array $column) use ($resourceModel) {
6060
$propertyClass = $this->schemaManager->resolveSchemaPropertyClass($column, $resourceModel);
6161

6262
return $this->propertyBuilder->build($column, $propertyClass);

src/Specs/Builders/Components/Model/ModelResourceComponentBuilder.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ protected function getPropertiesFromSchema(Model $resourceModel): array
4848

4949
return collect($columns)
5050
->filter(
51-
function (Column $column) use ($resourceModel) {
52-
return !$resourceModel->isFillable($column->getName());
51+
function (array $column) use ($resourceModel) {
52+
return !$resourceModel->isFillable($column['name']);
5353
}
5454
)->map(
55-
function (Column $column) use ($resourceModel) {
55+
function (array $column) use ($resourceModel) {
5656
$propertyClass = $this->schemaManager->resolveSchemaPropertyClass($column, $resourceModel);
5757

5858
return $this->propertyBuilder->build($column, $propertyClass);

src/Specs/Builders/PropertyBuilder.php

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@
44

55
namespace Orion\Specs\Builders;
66

7-
use Doctrine\DBAL\Schema\Column;
87
use Orion\ValueObjects\Specs\Schema\SchemaProperty;
98

109
class PropertyBuilder
1110
{
1211
/**
13-
* @param Column $column
14-
* @param string|SchemaProperty $concretePropertyClass
12+
* @param array $column
13+
* @param string $concretePropertyClass
1514
*
1615
* @return SchemaProperty
1716
*/
18-
public function build(Column $column, string $concretePropertyClass): SchemaProperty
17+
public function build(array $column, string $concretePropertyClass): SchemaProperty
1918
{
2019
/** @var SchemaProperty $property */
2120
$property = new $concretePropertyClass();
22-
$property->name = $column->getName();
23-
$property->nullable = !$column->getNotnull();
21+
$property->name = $column['name'];
22+
$property->nullable = !$column['nullable'];
2423

2524
return $property;
2625
}

src/Specs/Managers/SchemaManager.php

+38-32
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Doctrine\DBAL\Exception;
88
use Doctrine\DBAL\Schema\Column;
9-
use Doctrine\DBAL\Types\Types;
109
use Illuminate\Database\Eloquent\Model;
1110
use Orion\ValueObjects\Specs\Schema\Properties\AnySchemaProperty;
1211
use Orion\ValueObjects\Specs\Schema\Properties\ArraySchemaProperty;
@@ -27,61 +26,68 @@ class SchemaManager
2726
public function getSchemaColumns(Model $resourceModel): array
2827
{
2928
$table = $resourceModel->getConnection()->getTablePrefix().$resourceModel->getTable();
30-
$schema = $resourceModel->getConnection()->getDoctrineSchemaManager();
31-
32-
$databasePlatform = $schema->getDatabasePlatform();
33-
$databasePlatform->registerDoctrineTypeMapping('enum', 'string');
3429

3530
$database = null;
31+
3632
if (strpos($table, '.')) {
3733
[$database, $table] = explode('.', $table);
3834
}
3935

40-
return $schema->listTableColumns($table, $database) ?? [];
36+
if ((float) app()->version() < 11.0) {
37+
$schema = $resourceModel->getConnection()->getDoctrineSchemaManager();
38+
39+
$databasePlatform = $schema->getDatabasePlatform();
40+
$databasePlatform->registerDoctrineTypeMapping('enum', 'string');
41+
42+
return collect($schema->listTableColumns($table, $database))->map(function(Column $column) {
43+
return [
44+
'name' => $column->getName(),
45+
'type' => $column->getType()->getName(),
46+
'nullable' => !$column->getNotnull()
47+
];
48+
})->toArray();
49+
}
50+
51+
return $resourceModel->getConnection()->getSchemaBuilder()->getColumns($table);
4152
}
4253

4354
/**
44-
* @param Column $column
55+
* @param array $column
4556
* @param Model $resourceModel
4657
* @return string
4758
*/
48-
public function resolveSchemaPropertyClass(Column $column, Model $resourceModel): string
59+
public function resolveSchemaPropertyClass(array $column, Model $resourceModel): string
4960
{
50-
if (in_array($column->getName(), $resourceModel->getDates(), true)) {
61+
if (in_array($column['name'], $resourceModel->getDates(), true)) {
5162
return DateTimeSchemaProperty::class;
5263
}
5364

54-
switch ($column->getType()->getName()) {
55-
case Types::BIGINT:
56-
case Types::INTEGER:
57-
case Types::SMALLINT:
65+
switch ($column['type']) {
66+
case strpos($column['type'], 'int') !== false:
5867
return IntegerSchemaProperty::class;
59-
case Types::FLOAT:
60-
case Types::DECIMAL:
68+
case 'float':
69+
case 'decimal':
6170
return NumberSchemaProperty::class;
62-
case Types::BOOLEAN:
71+
case strpos($column['type'], 'bool') !== false:
6372
return BooleanSchemaProperty::class;
64-
case Types::STRING:
65-
case Types::TEXT:
66-
case Types::ASCII_STRING:
67-
case Types::GUID:
68-
case Types::TIME_MUTABLE:
69-
case Types::TIME_IMMUTABLE:
73+
case strpos($column['type'], 'char') !== false:
74+
case strpos($column['type'], 'time') !== false:
75+
case 'text':
76+
case 'string':
77+
case 'guid':
7078
return StringSchemaProperty::class;
71-
case Types::DATE_MUTABLE:
72-
case Types::DATE_IMMUTABLE:
79+
case 'date':
80+
case 'date_immutable':
7381
return DateSchemaProperty::class;
74-
case Types::DATETIME_MUTABLE:
75-
case Types::DATETIME_IMMUTABLE:
82+
case 'datetime':
83+
case 'datetime_immutable':
7684
return DateTimeSchemaProperty::class;
77-
case Types::ARRAY:
78-
case Types::SIMPLE_ARRAY:
85+
case 'array':
7986
return ArraySchemaProperty::class;
80-
case Types::OBJECT:
81-
case Types::JSON:
87+
case strpos($column['type'], 'json') !== false:
8288
return ObjectSchemaProperty::class;
83-
case Types::BINARY:
84-
case Types::BLOB:
89+
case 'binary':
90+
case 'blob':
8591
return BinarySchemaProperty::class;
8692
default:
8793
return AnySchemaProperty::class;

0 commit comments

Comments
 (0)