support fkeys with more than one column
[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);
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 $ref
57 * @return string
58 */
59 static function name($ref) {
60 return implode("_", array_map(function($ck, $cr) {
61 return preg_replace("/_$cr\$/", "", $ck);
62 }, $ref["foreignColumns"], $ref["referencedColumns"]));
63 }
64
65 /**
66 * Implements IteratorAggregate
67 * @return \ArrayIterator
68 */
69 function getIterator() {
70 return new \ArrayIterator(array_combine(
71 $this->foreignColumns, $this->referencedColumns));
72 }
73 }