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
|
|
|
|