Skip to content

Commit e9820ac

Browse files
committed
Implementação do updatePerformer.
1 parent 83ef4fb commit e9820ac

File tree

4 files changed

+279
-78
lines changed

4 files changed

+279
-78
lines changed

src/Db/Gateway/DynamicTableGateway.php

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Zend\EntityMapper\Db\Sql\Factory\Select\SelectFactory;
1010
use Zend\EntityMapper\Db\Sql\Performer\InsertPerformer;
1111
use Zend\EntityMapper\Db\Sql\Performer\SelectPerformer;
12+
use Zend\EntityMapper\Db\Sql\Performer\UpdatePerformer;
1213

1314
/**
1415
* DynamicTableGateway
@@ -91,6 +92,28 @@ public function select(string $entity, $select)
9192
return $rows;
9293
}
9394

95+
/**
96+
* @param array $objects
97+
* @return array
98+
* @throws \Zend\Cache\Exception\ExceptionInterface
99+
* @throws \Zend\EntityMapper\Config\Container\Exceptions\ItemNotFoundException
100+
*/
101+
public function insertArray(array $objects): array
102+
{
103+
$response = [];
104+
105+
foreach ($objects as $object) {
106+
$entity = get_class($object);
107+
$this->setUp($entity);
108+
109+
$insertPerformer = new InsertPerformer(self::$tableGateways[$entity]);
110+
$object = $insertPerformer->perform($object);
111+
$response[] = $object;
112+
}
113+
114+
return $response;
115+
}
116+
94117
/**
95118
* @param $object
96119
* @return mixed
@@ -99,12 +122,52 @@ public function select(string $entity, $select)
99122
*/
100123
public function insert($object)
101124
{
102-
$entity = get_class($object);
103-
$this->setUp($entity);
125+
$response = $this->insertArray([$object]);
126+
127+
if (count($response) == 0) {
128+
return null;
129+
}
130+
131+
return $response[0];
132+
}
133+
134+
/**
135+
* @param array $objects
136+
* @return array
137+
* @throws \Zend\Cache\Exception\ExceptionInterface
138+
* @throws \Zend\EntityMapper\Config\Container\Exceptions\ItemNotFoundException
139+
*/
140+
public function updateArray(array $objects): array
141+
{
142+
$response = [];
104143

105-
$insertPerformer = new InsertPerformer(self::$tableGateways[$entity]);
106-
$object = $insertPerformer->perform($object);
144+
foreach ($objects as $object) {
145+
$entity = get_class($object);
146+
$this->setUp($entity);
107147

108-
return $object;
148+
$updatePerformer = new UpdatePerformer(self::$tableGateways[$entity]);
149+
$object = $updatePerformer->perform($object);
150+
$response[] = $object;
151+
}
152+
153+
return $response;
109154
}
155+
156+
/**
157+
* @param $object
158+
* @return mixed|null
159+
* @throws \Zend\Cache\Exception\ExceptionInterface
160+
* @throws \Zend\EntityMapper\Config\Container\Exceptions\ItemNotFoundException
161+
*/
162+
public function update($object)
163+
{
164+
$response = $this->updateArray([$object]);
165+
166+
if (count($response) == 0) {
167+
return null;
168+
}
169+
170+
return $response[0];
171+
}
172+
110173
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Zend\EntityMapper\Db\Gateway;
4+
5+
use Zend\Db\TableGateway\TableGatewayInterface;
6+
7+
class TransactionalTableGateway implements TableGatewayInterface
8+
{
9+
10+
}
Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,60 @@
11
<?php
2+
3+
namespace Zend\EntityMapper\Db\Sql\Performer;
4+
5+
use Zend\Db\TableGateway\TableGateway;
6+
use Zend\EntityMapper\Config\Container\Container;
7+
use Zend\EntityMapper\Db\Sql\Performer\Base\AbstractPerformer;
8+
use Zend\EntityMapper\Mapping\Extraction\Extractor;
9+
210
/**
3-
* Created by PhpStorm.
4-
* User: Lucas A. de Araújo
5-
* Date: 13/07/2018
6-
* Time: 09:20
7-
*/
11+
* UpdatePerformer
12+
*
13+
* @package Zend\EntityMapper\Db\Sql\Performer
14+
*/
15+
class UpdatePerformer extends AbstractPerformer
16+
{
17+
/**
18+
* @var Container
19+
*/
20+
private $container;
21+
22+
/**
23+
* UpdatePerformer constructor.
24+
*
25+
* @param TableGateway $tableGateway
26+
* @throws \Zend\Cache\Exception\ExceptionInterface
27+
*/
28+
public function __construct(TableGateway $tableGateway)
29+
{
30+
$this->tableGateway = $tableGateway;
31+
$this->container = new Container();
32+
}
33+
34+
/**
35+
* @param $object
36+
* @throws \Zend\Cache\Exception\ExceptionInterface
37+
* @throws \Zend\EntityMapper\Config\Container\Exceptions\ItemNotFoundException
38+
*/
39+
public function perform($object)
40+
{
41+
$entityName = get_class($object);
42+
$entityConf = $this->container->get($entityName);
43+
$primaryKey = null;
44+
$reflection = new \ReflectionObject($object);
45+
46+
foreach ($entityConf->getFields() as $field) {
47+
if ($field->isPrimaryKey()) {
48+
$primaryKey = $field;
49+
}
50+
}
51+
52+
$primaryKeyValue = $reflection->getProperty($primaryKey->getProperty())->getValue($object);
53+
$primaryKeyWhere = [$primaryKey->getAlias() => $primaryKeyValue];
54+
55+
$extractor = new Extractor();
56+
$arrayParsedObject = $extractor->extract($object);
57+
58+
$this->tableGateway->update($arrayParsedObject, $primaryKeyWhere);
59+
}
60+
}

0 commit comments

Comments
 (0)