1: <?php
2:
3: namespace PHPixie\ORM\Relationships\Type\OneTo\Type;
4:
5: class Many extends \PHPixie\ORM\Relationships\Type\OneTo
6: {
7:
8: public function entityProperty($side, $entity)
9: {
10: if ($side->type() === 'owner') {
11: return $this->ownerEntityProperty($side, $entity);
12: }
13:
14: return $this->itemsEntityProperty($side, $entity);
15: }
16:
17: public function queryProperty($side, $query)
18: {
19: if ($side->type() === 'owner') {
20: return $this->ownerQueryProperty($side, $query);
21: }
22:
23: return $this->itemsQueryProperty($side, $query);
24: }
25:
26: public function preloader($side, $modelConfig, $result, $loader)
27: {
28: if ($side->type() === 'owner') {
29: return $this->ownerPreloader($side, $modelConfig, $result, $loader);
30: }
31:
32: return $this->itemsPreloader($side, $modelConfig, $result, $loader);
33: }
34:
35: public function ownerPreloadValue($propertyName, $owner)
36: {
37: return new Many\Value\Preload\Owner($propertyName, $owner);
38: }
39:
40: public function ownerPropertyPreloader($owner)
41: {
42: return new Many\Preloader\Property\Owner($owner);
43: }
44:
45: protected function config($configSlice)
46: {
47: return new Many\Side\Config($this->configs->inflector(), $configSlice);
48: }
49:
50: protected function side($type, $config)
51: {
52: return new Many\Side($type, $config);
53: }
54:
55: protected function sideTypes($config)
56: {
57: return array('owner', 'items');
58: }
59:
60: protected function buildHandler()
61: {
62: return new Many\Handler(
63: $this->models,
64: $this->planners,
65: $this->plans,
66: $this->steps,
67: $this->loaders,
68: $this->mappers,
69: $this
70: );
71: }
72:
73: protected function ownerEntityProperty($side, $entity)
74: {
75: return new Many\Property\Entity\Owner($this->handler(), $side, $entity);
76: }
77:
78: protected function itemsEntityProperty($side, $entity)
79: {
80: return new Many\Property\Entity\Items($this->handler(), $side, $entity);
81: }
82:
83: protected function ownerQueryProperty($side, $query)
84: {
85: return new Many\Property\Query\Owner($this->handler(), $side, $query);
86: }
87:
88: protected function itemsQueryProperty($side, $query)
89: {
90: return new Many\Property\Query\Items($this->handler(), $side, $query);
91: }
92:
93: protected function ownerPreloader($side, $modelConfig, $result, $loader)
94: {
95: return new Many\Preloader\Owner($side, $modelConfig, $result, $loader);
96: }
97:
98: protected function itemsPreloader($side, $modelConfig, $result, $loader)
99: {
100: return new Many\Preloader\Items($this->loaders, $side, $modelConfig, $result, $loader);
101: }
102:
103: }
104: