Ubiquity  2.0.3
php rapid development framework
Model.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ubiquity\orm\creator;
4 
5 class Model {
6  private $members;
7  private $name;
8  private $namespace;
9 
10  public function __construct($name, $namespace="models") {
11  $this->name=\ucfirst($name);
12  $this->members=array ();
13  $this->namespace=$namespace;
14  }
15 
16  public function addMember(Member $member) {
17  $this->members[$member->getName()]=$member;
18  return $this;
19  }
20 
21  public function addManyToOne($member, $name, $className, $nullable=false) {
22  if (\array_key_exists($member, $this->members) === false) {
23  $this->addMember(new Member($member));
24  $this->removeMember($name);
25  }
26  $this->members[$member]->addManyToOne($name, $className, $nullable);
27  }
28 
29  public function removeMember($memberName) {
30  if (isset($this->members[$memberName]) && $this->members[$memberName]->isPrimary() === false)
31  unset($this->members[$memberName]);
32  }
33 
34  public function addOneToMany($member, $mappedBy, $className) {
35  if (\array_key_exists($member, $this->members) === false) {
36  $this->addMember(new Member($member));
37  }
38  $this->members[$member]->addOneToMany($mappedBy, $className);
39  }
40 
41  public function addManyToMany($member, $targetEntity, $inversedBy, $joinTable, $joinColumns=[], $inverseJoinColumns=[]) {
42  if (\array_key_exists($member, $this->members) === false) {
43  $this->addMember(new Member($member));
44  }
45  $this->members[$member]->addManyToMany($targetEntity, $inversedBy, $joinTable, $joinColumns, $inverseJoinColumns);
46  }
47 
48  public function __toString() {
49  $result="<?php\n";
50  if ($this->namespace !== "" && $this->namespace !== null) {
51  $result.="namespace " . $this->namespace . ";\n";
52  }
53  $result.="class " . ucfirst($this->name) . "{";
54  $members=$this->members;
55  \array_walk($members, function ($item) {
56  return $item . "";
57  });
58  $result.=implode("", $members);
59  foreach ( $members as $member ) {
60  $result.=$member->getGetter();
61  $result.=$member->getSetter();
62  }
63  $result.=$this->getToString();
64  $result.="\n}";
65  return $result;
66  }
67 
68  public function getName() {
69  $namespace="";
70  if ($this->namespace !== "" && $this->namespace !== null)
71  $namespace=$this->namespace . '\\';
72  return $namespace . $this->name;
73  }
74 
75  public function getSimpleName() {
76  return $this->name;
77  }
78 
79  public function isAssociation() {
80  $count=0;
81  foreach ( $this->members as $member ) {
82  if ($member->isManyToOne() === true || $member->isPrimary() === true) {
83  $count++;
84  }
85  }
86  return $count == \sizeof($this->members);
87  }
88 
89  public function getPrimaryKey() {
90  foreach ( $this->members as $member ) {
91  if ($member->isPrimary() === true) {
92  return $member;
93  }
94  }
95  return null;
96  }
97 
98  public function getPkName(){
99  $pk=$this->getPrimaryKey();
100  if(isset($pk))
101  return $pk->getName();
102  return null;
103  }
104 
105  public function getDefaultFk() {
106  return "id" . $this->name;
107  }
108 
109  public function getManyToOneMembers() {
110  $result=array ();
111  foreach ( $this->members as $member ) {
112  if ($member->isManyToOne() === true) {
113  $result[]=$member;
114  }
115  }
116  return $result;
117  }
118 
119  private function getToStringField(){
120  $result=null;
121  foreach ( $this->members as $member ) {
122  if ($member->getDbType()!=="mixed" && $member->isNullable()!==true && !$member->isPrimary()) {
123  $result=$member->getName();
124  }
125  }
126  return $result;
127  }
128 
129  public function getToString(){
130  $field=$this->getToStringField();
131  if(isset($field)){
132  $corps='$this->' . $field;
133  }
134  elseif(($pkName=$this->getPkName())!==null){
135  $corps='$this->' . $pkName;
136  }else{
137  $corps='"'.$this->name.'@"'.'.\spl_object_hash($this)';
138  }
139  $result="\n\t public function __toString(){\n";
140  $result.="\t\t" . 'return '.$corps. ";\n";
141  $result.="\t}\n";
142  return $result;
143  }
144 }
addOneToMany($member, $mappedBy, $className)
Definition: Model.php:34
addMember(Member $member)
Definition: Model.php:16
addManyToMany($member, $targetEntity, $inversedBy, $joinTable, $joinColumns=[], $inverseJoinColumns=[])
Definition: Model.php:41
addManyToOne($member, $name, $className, $nullable=false)
Definition: Model.php:21
removeMember($memberName)
Definition: Model.php:29
__construct($name, $namespace="models")
Definition: Model.php:10