data mapper POC
[m6w6/pq-gateway] / lib / pq / Gateway / Table / Reference.php
1 <?php
2
3 namespace pq\Gateway\Table;
4
5 /**
6 * Foreign key
7 */
8 class Reference implements \IteratorAggregate
9 {
10 /**
11 * @var string
12 */
13 public $name;
14
15 /**
16 * @var string
17 */
18 public $foreignTable;
19
20 /**
21 * @var array
22 */
23 public $foreignColumns;
24
25 /**
26 * @var string
27 */
28 public $referencedTable;
29
30 /**
31 * @var array
32 */
33 public $referencedColumns;
34
35 /**
36 * @param array $ref
37 */
38 function __construct($ref) {
39 $this->name = self::name($ref["foreignColumns"], $ref["referencedColumns"]);
40 $this->foreignTable = $ref["foreignTable"];
41 $this->foreignColumns = $ref["foreignColumns"];
42 $this->referencedTable = $ref["referencedTable"];
43 $this->referencedColumns = $ref["referencedColumns"];
44 }
45
46 /**
47 * @param array $state
48 * @return \pq\Gateway\Table\Reference
49 */
50 static function __set_state($state) {
51 return new static($state);
52 }
53
54 /**
55 * Compose an identifying name
56 * @param array $foreignColumns
57 * @param array $referencedColumns
58 * @return string
59 */
60 static function name(array $foreignColumns, array $referencedColumns) {
61 return implode("_", array_map(function($ck, $cr) {
62 return preg_replace("/_$cr\$/", "", $ck);
63 }, $foreignColumns, $referencedColumns));
64 }
65
66 /**
67 * Implements IteratorAggregate
68 * @return \ArrayIterator
69 */
70 function getIterator() {
71 return new \ArrayIterator(array_combine(
72 $this->foreignColumns, $this->referencedColumns));
73 }
74 }