1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
25: namespace DSchoenbauer\Orm\Builder;
26:
27: use DSchoenbauer\Orm\CrudModel;
28: use DSchoenbauer\Orm\Entity\EntityInterface;
29: use DSchoenbauer\Orm\Enum\ModelEvents;
30: use DSchoenbauer\Orm\Events\Persistence\PdoCreate;
31: use DSchoenbauer\Orm\Events\Persistence\PdoDelete;
32: use DSchoenbauer\Orm\Events\Persistence\PdoSelect;
33: use DSchoenbauer\Orm\Events\Persistence\PdoUpdate;
34: use DSchoenbauer\Orm\Events\Validate\DataType\DataTypeBoolean;
35: use DSchoenbauer\Orm\Events\Validate\DataType\DataTypeDate;
36: use DSchoenbauer\Orm\Events\Validate\DataType\DataTypeNumber;
37: use DSchoenbauer\Orm\Events\Validate\DataType\DataTypeString;
38: use DSchoenbauer\Orm\Events\Validate\Schema\DefaultValue;
39: use DSchoenbauer\Orm\Events\Validate\Schema\RequiredFields;
40: use DSchoenbauer\Orm\Events\Validate\Schema\ValidFields;
41: use PDO;
42:
43: 44: 45: 46: 47:
48: class PdoModelBuilder implements BuilderInterface
49: {
50:
51: 52: 53:
54: protected $adapter;
55:
56: 57: 58:
59: protected $model;
60:
61: public function __construct(\PDO $adapter, EntityInterface $entity)
62: {
63: $this->setAdapter($adapter)->setModel(new CrudModel($entity));
64: }
65:
66: public function build()
67: {
68: return $this->getModel();
69: }
70:
71: public function buildFinalOutput()
72: {
73: }
74:
75: public function buildPersistence()
76: {
77: $adapter = $this->getAdapter();
78: $this->getModel()
79: ->accept(new PdoCreate([ModelEvents::CREATE], $adapter))
80: ->accept(new PdoSelect([ModelEvents::FETCH], $adapter))
81: ->accept(new PdoUpdate([ModelEvents::UPDATE], $adapter))
82: ->accept(new PdoDelete([ModelEvents::DELETE], $adapter));
83: }
84:
85: public function buildValidations()
86: {
87: $this->getModel()
88: ->accept(new ValidFields([ModelEvents::CREATE, ModelEvents::UPDATE]))
89: ->accept(new DefaultValue([ModelEvents::CREATE]))
90: ->accept(new RequiredFields([ModelEvents::CREATE, ModelEvents::UPDATE]))
91:
92: ->accept(new DataTypeBoolean([ModelEvents::CREATE, ModelEvents::UPDATE]))
93: ->accept(new DataTypeDate([ModelEvents::CREATE, ModelEvents::UPDATE]))
94: ->accept(new DataTypeNumber([ModelEvents::CREATE, ModelEvents::UPDATE]))
95: ->accept(new DataTypeString([ModelEvents::CREATE, ModelEvents::UPDATE]))
96:
97: ;
98: }
99:
100: 101: 102:
103: public function getAdapter()
104: {
105: return $this->adapter;
106: }
107:
108: 109: 110: 111:
112: public function setAdapter(PDO $adapter)
113: {
114: $this->adapter = $adapter;
115: return $this;
116: }
117:
118: 119: 120:
121: public function getModel()
122: {
123: return $this->model;
124: }
125:
126: 127: 128: 129:
130: public function setModel(CrudModel $model)
131: {
132: $this->model = $model;
133: return $this;
134: }
135: }
136: