1: <?php
2:
3: /*
4: * To change this license header, choose License Headers in Project Properties.
5: * To change this template file, choose Tools | Templates
6: * and open the template in the editor.
7: */
8: namespace DSchoenbauer\Orm\Events\Persistence;
9:
10: use DSchoenbauer\Orm\Events\AbstractEvent;
11: use DSchoenbauer\Orm\Model;
12: use DSchoenbauer\Sql\Command\Create;
13: use PDO;
14: use Zend\EventManager\Event;
15:
16: /**
17: * Event driven hook to creates information from a PDO connection
18: *
19: * @author David Schoenbauer <dschoenbauer@gmail.com>
20: */
21: class PdoCreate extends AbstractEvent
22: {
23:
24: private $adapter;
25: private $create;
26:
27: /**
28: *
29: * @param array $events An array of event names to bind to
30: * @param PDO $adapter PDO connection to a db of some sort.
31: * @param Create $create default null, if no create object offered one will
32: * be lazy loaded for you
33: * @since v1.0.0
34: */
35: public function __construct(array $events, PDO $adapter, Create $create = null)
36: {
37: parent::__construct($events);
38: $this->setAdapter($adapter)->setCreate($create);
39: }
40:
41: /**
42: * event action
43: * @param Event $event object passed when event is fired
44: * @return void
45: * @since v1.0.0
46: */
47: public function onExecute(Event $event)
48: {
49: if (!$event->getTarget() instanceof Model) {
50: return;
51: }
52: /* @var $model Model */
53: $model = $event->getTarget();
54: $entity = $model->getEntity();
55: $this->getCreate()
56: ->setTable($entity->getTable())
57: ->setData($model->getData())
58: ->execute($this->getAdapter());
59: }
60:
61: /**
62: * Returns a PHP Data Object
63: * @return PDO
64: * @since v1.0.0
65: */
66: public function getAdapter()
67: {
68: return $this->adapter;
69: }
70:
71: /**
72: * PDO connection to a db of some sort.
73: * @param PDO $adapter
74: * @return $this
75: * @since v1.0.0
76: */
77: public function setAdapter(PDO $adapter)
78: {
79: $this->adapter = $adapter;
80: return $this;
81: }
82:
83: /**
84: * object with logic for the Create. If Create is not provided one will be lazy loaded
85: * @return Create object that is used for the create logic
86: * @since v1.0.0
87: */
88: public function getCreate()
89: {
90: if (!$this->create instanceof Create) {
91: $this->setCreate(new Create(null, []));
92: }
93: return $this->create;
94: }
95:
96: /**
97: * @param Create $create object with the create logic
98: * @return $this
99: * @since v1.0.0
100: */
101: public function setCreate(Create $create = null)
102: {
103: $this->create = $create;
104: return $this;
105: }
106: }
107: