1: <?php
2:
3: namespace PHPixie\ORM;
4:
5: class Planners
6: {
7: protected $ormBulder;
8: protected $planners = array();
9:
10: public function __construct($ormBuilder)
11: {
12: $this->ormBuilder = $ormBuilder;
13: }
14:
15: 16: 17:
18: public function document()
19: {
20: return $this->plannerInstance('document');
21: }
22:
23: 24: 25:
26: public function in()
27: {
28: return $this->plannerInstance('in');
29: }
30:
31: 32: 33:
34: public function pivot()
35: {
36: return $this->plannerInstance('pivot');
37: }
38:
39: 40: 41:
42: public function query()
43: {
44: return $this->plannerInstance('query');
45: }
46:
47: 48: 49:
50: public function update()
51: {
52: return $this->plannerInstance('update');
53: }
54:
55: protected function plannerInstance($name)
56: {
57: if (!array_key_exists($name, $this->planners)) {
58: $method = 'build'.ucfirst($name).'Planner';
59: $this->planners[$name] = $this->$method();
60: }
61:
62: return $this->planners[$name];
63: }
64:
65: protected function buildDocumentPlanner()
66: {
67: return new Planners\Planner\Document();
68: }
69:
70: protected function buildInPlanner()
71: {
72: return new Planners\Planner\In(
73: $this->ormBuilder->conditions(),
74: $this->ormBuilder->mappers(),
75: $this->ormBuilder->steps()
76: );
77: }
78:
79: protected function buildPivotPlanner()
80: {
81: return new Planners\Planner\Pivot(
82: $this,
83: $this->ormBuilder->steps(),
84: $this->ormBuilder->database()
85: );
86: }
87:
88: protected function buildQueryPlanner()
89: {
90: return new Planners\Planner\Query();
91: }
92:
93: protected function buildUpdatePlanner()
94: {
95: return new Planners\Planner\Update(
96: $this->ormBuilder->steps()
97: );
98: }
99:
100: }
101: