1: <?php
2: 3: 4: 5: 6:
7: namespace DSchoenbauer\Orm\Events\Persistence;
8:
9: use DSchoenbauer\Orm\Events\AbstractEvent;
10: use DSchoenbauer\Orm\Model;
11: use DSchoenbauer\Sql\Command\Delete;
12: use DSchoenbauer\Sql\Where\ArrayWhere;
13: use PDO;
14: use Zend\EventManager\Event;
15:
16: 17: 18: 19: 20:
21: class PdoDelete extends AbstractEvent
22: {
23:
24: private $adapter;
25: private $delete;
26:
27: 28: 29: 30: 31:
32: public function __construct(array $events, PDO $adapter, Delete $delete = null)
33: {
34: parent::__construct($events);
35: $this->setAdapter($adapter)->setDelete($delete);
36: }
37:
38: 39: 40: 41: 42: 43:
44: public function onExecute(Event $event)
45: {
46: if (!$event->getTarget() instanceof Model) {
47: return;
48: }
49:
50: $model = $event->getTarget();
51: $entity = $model->getEntity();
52: $this->getDelete()
53: ->setTable($entity->getTable())
54: ->setWhere(new ArrayWhere([$entity->getIdField() => $model->getId()]))
55: ->execute($this->getAdapter());
56: }
57: 58: 59: 60: 61:
62: public function getAdapter()
63: {
64: return $this->adapter;
65: }
66:
67: 68: 69: 70: 71: 72:
73: public function setAdapter(PDO $adapter)
74: {
75: $this->adapter = $adapter;
76: return $this;
77: }
78:
79: 80: 81: 82: 83:
84: public function getDelete()
85: {
86: if (!$this->delete) {
87: $this->setDelete(new Delete(null));
88: }
89: return $this->delete;
90: }
91:
92: 93: 94: 95: 96: 97:
98: public function setDelete(Delete $delete = null)
99: {
100: $this->delete = $delete;
101: return $this;
102: }
103: }
104: