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

Model::getDefaultFk()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
namespace micro\orm\creator;
3
class Model {
4
	private $members;
5
	private $name;
6
	private $namespace;
7
8
	public function __construct($name,$namespace="models"){
9
		$this->name=\ucfirst($name);
10
		$this->members=array();
11
		$this->namespace=$namespace;
12
	}
13
14
	public function addMember(Member $member){
15
		$this->members[$member->getName()]=$member;
16
		return $this;
17
	}
18
19
	public function addManyToOne($member,$name,$className,$nullable=false){
20
		if(\array_key_exists($member, $this->members)===false){
21
			$this->addMember(new Member($member));
22
			$this->removeMember($name);
23
		}
24
		$this->members[$member]->addManyToOne($name,$className,$nullable);
25
	}
26
27
	public function removeMember($memberName){
28
		if($this->members[$memberName]->isPrimary()===false)
29
			unset($this->members[$memberName]);
30
	}
31
32
	public function addOneToMany($member,$mappedBy,$className){
33
		if(\array_key_exists($member, $this->members)===false){
34
			$this->addMember(new Member($member));
35
		}
36
		$this->members[$member]->addOneToMany($mappedBy,$className);
37
	}
38
39
	public function addManyToMany($member,$targetEntity,$inversedBy,$joinTable,$joinColumns=[],$inverseJoinColumns=[]){
40
		if(\array_key_exists($member, $this->members)===false){
41
			$this->addMember(new Member($member));
42
		}
43
		$this->members[$member]->addManyToMany($targetEntity,$inversedBy,$joinTable,$joinColumns,$inverseJoinColumns);
44
	}
45
46
	public function __toString(){
47
		$result="<?php\n";
48
		if($this->namespace!=="" && $this->namespace!==null){
49
			$result.="namespace ".$this->namespace.";\n";
50
		}
51
		$result.="class ".ucfirst($this->name)."{";
52
		$members=$this->members;
53
		\array_walk($members,function($item){return $item."";});
54
		$result.=implode("", $members);
55
		foreach ($members as $member){
56
			$result.=$member->getGetter();
57
			$result.=$member->getSetter();
58
		}
59
		$result.="\n}";
60
		return $result;
61
	}
62
63
	public function getName() {
64
		if($this->namespace!=="" && $this->namespace!==null)
65
			$namespace=$this->namespace.'\\';
66
		return $namespace.$this->name;
0 ignored issues
show
Bug introduced by
The variable $namespace does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
67
	}
68
69
	public function getSimpleName() {
70
		return $this->name;
71
	}
72
73
	public function isAssociation(){
74
		$count=0;
75
		foreach ($this->members as $member){
76
			if($member->isManyToOne()===true || $member->isPrimary()===true){
77
				$count++;
78
			}
79
		}
80
		return $count==\sizeof($this->members);
81
	}
82
83
	public function getPrimaryKey(){
84
		foreach ($this->members as $member){
85
			if($member->isPrimary()===true){
86
				return $member;
87
			}
88
		}
89
		return null;
90
	}
91
92
	public function getDefaultFk(){
93
		return "id".$this->name;
94
	}
95
96
	public function getManyToOneMembers(){
97
		$result=array();
98
		foreach ($this->members as $member){
99
			if($member->isManyToOne()===true){
100
				$result[]=$member;
101
			}
102
		}
103
		return $result;
104
	}
105
106
}
107