Completed
Push — master ( ac3b2a...67ef21 )
by Jean-Christophe
02:07
created

ModelParser::__toString()   B

Complexity

Conditions 5
Paths 16

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.5125
c 0
b 0
f 0
cc 5
eloc 17
nc 16
nop 0
1
<?php
2
3
namespace micro\orm\parser;
4
5
use micro\utils\JArray;
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
19
	public function parse($modelClass){
20
		$instance=new $modelClass();
21
		$this->primaryKeys=Reflexion::getKeyFields($instance);
22
		$this->oneToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@oneToMany");
23
		$this->manytoOneMembers=Reflexion::getMembersNameWithAnnotation($modelClass, "@manyToOne");
24
		$this->manyToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@manyToMany");
25
		$this->joinColumnMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinColumn");
26
		$this->joinTableMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinTable");
27
		$properties=Reflexion::getProperties($instance);
28
		foreach ($properties as $property){
29
			$propName=$property->getName();
30
			$this->fieldNames[$propName]=Reflexion::getFieldName($modelClass, $propName);
31
			$nullable=Reflexion::isNullable($modelClass, $propName);
32
			$serializable=Reflexion::isSerializable($modelClass, $propName);
33
			if($nullable)
34
				$this->nullableMembers[]=$propName;
35
			if(!$serializable)
36
				$this->notSerializableMembers[]=$propName;
37
		}
38
		$this->global["#tableName"]=Reflexion::getTableName($modelClass);
39
	}
40
41
	public function __toString(){
42
		$result=$this->global;
43
		$result["#primaryKeys"]=$this->primaryKeys;
44
		$result["#manyToOne"]=$this->manytoOneMembers;
45
		$result["#fieldNames"]=$this->fieldNames;
46
		$result["#nullable"]=$this->nullableMembers;
47
		$result["#notSerializable"]=$this->notSerializableMembers;
48
		foreach ($this->oneToManyMembers as $member=>$annotation){
49
			$result["#oneToMany"][$member]=$annotation->getPropertiesAndValues();
50
		}
51
		foreach ($this->manyToManyMembers as $member=>$annotation){
52
			$result["#manyToMany"][$member]=$annotation->getPropertiesAndValues();
53
		}
54
55
		foreach ($this->joinTableMembers as $member=>$annotation){
56
			$result["#joinTable"][$member]=$annotation->getPropertiesAndValues();
57
		}
58
59
		foreach ($this->joinColumnMembers as $member=>$annotation){
60
			$result["#joinColumn"][$member]=$annotation->getPropertiesAndValues();
61
			$result["#invertedJoinColumn"][$annotation->name]=["member"=>$member,"className"=>$annotation->className];
62
		}
63
		return "return ".JArray::asPhpArray($result,"array").";";
64
	}
65
}
66