|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Ubiquity\orm\parser; |
|
4
|
|
|
|
|
5
|
|
|
use Ubiquity\utils\base\UArray; |
|
6
|
|
|
|
|
7
|
|
|
class ModelParser { |
|
8
|
|
|
protected $global; |
|
9
|
|
|
protected $primaryKeys; |
|
10
|
|
|
protected $manytoOneMembers; |
|
11
|
|
|
protected $oneToManyMembers; |
|
12
|
|
|
protected $manyToManyMembers; |
|
13
|
|
|
protected $joinColumnMembers; |
|
14
|
|
|
protected $joinTableMembers; |
|
15
|
|
|
protected $nullableMembers=[ ]; |
|
16
|
|
|
protected $notSerializableMembers=[ ]; |
|
17
|
|
|
protected $fieldNames; |
|
18
|
|
|
protected $fieldTypes=[]; |
|
19
|
|
|
protected $yuml; |
|
20
|
|
|
|
|
21
|
1 |
|
public function parse($modelClass) { |
|
22
|
1 |
|
$instance=new $modelClass(); |
|
23
|
1 |
|
$this->primaryKeys=Reflexion::getKeyFields($instance); |
|
24
|
1 |
|
$this->oneToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@oneToMany"); |
|
25
|
1 |
|
$this->manytoOneMembers=Reflexion::getMembersNameWithAnnotation($modelClass, "@manyToOne"); |
|
26
|
1 |
|
$this->manyToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@manyToMany"); |
|
27
|
1 |
|
$this->joinColumnMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinColumn"); |
|
28
|
1 |
|
$this->joinTableMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinTable"); |
|
29
|
1 |
|
$yuml=Reflexion::getAnnotationClass($modelClass, "@yuml"); |
|
30
|
1 |
|
if(\sizeof($yuml)>0) |
|
31
|
|
|
$this->yuml=$yuml[0]; |
|
32
|
1 |
|
$properties=Reflexion::getProperties($instance); |
|
33
|
1 |
|
foreach ( $properties as $property ) { |
|
34
|
1 |
|
$propName=$property->getName(); |
|
35
|
1 |
|
$this->fieldNames[$propName]=Reflexion::getFieldName($modelClass, $propName); |
|
36
|
1 |
|
$nullable=Reflexion::isNullable($modelClass, $propName); |
|
37
|
1 |
|
$serializable=Reflexion::isSerializable($modelClass, $propName); |
|
38
|
1 |
|
if ($nullable) |
|
39
|
1 |
|
$this->nullableMembers[]=$propName; |
|
40
|
1 |
|
if (!$serializable) |
|
41
|
1 |
|
$this->notSerializableMembers[]=$propName; |
|
42
|
1 |
|
$type=Reflexion::getDbType($modelClass, $propName); |
|
43
|
1 |
|
if($type===false) |
|
44
|
1 |
|
$type="mixed"; |
|
45
|
1 |
|
$this->fieldTypes[$propName]=$type; |
|
46
|
|
|
} |
|
47
|
1 |
|
$this->global["#tableName"]=Reflexion::getTableName($modelClass); |
|
48
|
1 |
|
} |
|
49
|
|
|
|
|
50
|
1 |
|
public function __toString() { |
|
51
|
1 |
|
$result=$this->global; |
|
52
|
1 |
|
$result["#primaryKeys"]=$this->primaryKeys; |
|
53
|
1 |
|
$result["#manyToOne"]=$this->manytoOneMembers; |
|
54
|
1 |
|
$result["#fieldNames"]=$this->fieldNames; |
|
55
|
1 |
|
$result["#fieldTypes"]=$this->fieldTypes; |
|
56
|
1 |
|
$result["#nullable"]=$this->nullableMembers; |
|
57
|
1 |
|
$result["#notSerializable"]=$this->notSerializableMembers; |
|
58
|
1 |
|
if(isset($this->yuml)) |
|
59
|
|
|
$result["#yuml"]=$this->yuml->getPropertiesAndValues(); |
|
60
|
1 |
|
foreach ( $this->oneToManyMembers as $member => $annotation ) { |
|
61
|
1 |
|
$result["#oneToMany"][$member]=$annotation->getPropertiesAndValues(); |
|
62
|
|
|
} |
|
63
|
1 |
|
foreach ( $this->manyToManyMembers as $member => $annotation ) { |
|
64
|
1 |
|
$result["#manyToMany"][$member]=$annotation->getPropertiesAndValues(); |
|
65
|
|
|
} |
|
66
|
|
|
|
|
67
|
1 |
|
foreach ( $this->joinTableMembers as $member => $annotation ) { |
|
68
|
1 |
|
$result["#joinTable"][$member]=$annotation->getPropertiesAndValues(); |
|
69
|
|
|
} |
|
70
|
|
|
|
|
71
|
1 |
|
foreach ( $this->joinColumnMembers as $member => $annotation ) { |
|
72
|
1 |
|
$result["#joinColumn"][$member]=$annotation->getPropertiesAndValues(); |
|
73
|
1 |
|
$result["#invertedJoinColumn"][$annotation->name]=[ "member" => $member,"className" =>$annotation->className ]; |
|
74
|
|
|
} |
|
75
|
1 |
|
return "return " . UArray::asPhpArray($result, "array") . ";"; |
|
76
|
|
|
} |
|
77
|
|
|
} |
|
78
|
|
|
|