X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fpq%2FGateway%2FTable%2FReference.php;h=6fcb7e3578a9f4ad03631b47b8e66f3a0e807c4e;hb=e6da4c7430e5c5b4ba482206e42aeebb4363d2b3;hp=6f8e29c29caf5d116d2622a08c0b26d99d4fd70f;hpb=ccdcd2977c8bdc7c74b89b2fb7c2ea46479692b8;p=m6w6%2Fpq-gateway diff --git a/lib/pq/Gateway/Table/Reference.php b/lib/pq/Gateway/Table/Reference.php index 6f8e29c..6fcb7e3 100644 --- a/lib/pq/Gateway/Table/Reference.php +++ b/lib/pq/Gateway/Table/Reference.php @@ -5,7 +5,7 @@ namespace pq\Gateway\Table; /** * Foreign key */ -class Reference +class Reference implements \IteratorAggregate { /** * @var string @@ -18,9 +18,9 @@ class Reference public $foreignTable; /** - * @var string + * @var array */ - public $foreignColumn; + public $foreignColumns; /** * @var string @@ -28,19 +28,19 @@ class Reference public $referencedTable; /** - * @var string + * @var array */ - public $referencedColumn; + public $referencedColumns; /** - * @param array $state + * @param array $ref */ - function __construct($state) { - $this->name = $state["name"]; - $this->foreignColumn = $state["foreignColumn"]; - $this->foreignTable = $state["foreignTable"]; - $this->referencedColumn = $state["referencedColumn"]; - $this->referencedTable = $state["referencedTable"]; + function __construct($ref) { + $this->name = self::name($ref["foreignColumns"], $ref["referencedColumns"]); + $this->foreignTable = $ref["foreignTable"]; + $this->foreignColumns = $ref["foreignColumns"]; + $this->referencedTable = $ref["referencedTable"]; + $this->referencedColumns = $ref["referencedColumns"]; } /** @@ -50,4 +50,25 @@ class Reference static function __set_state($state) { return new static($state); } + + /** + * Compose an identifying name + * @param array $foreignColumns + * @param array $referencedColumns + * @return string + */ + static function name(array $foreignColumns, array $referencedColumns) { + return implode("_", array_map(function($ck, $cr) { + return preg_replace("/_$cr\$/", "", $ck); + }, $foreignColumns, $referencedColumns)); + } + + /** + * Implements IteratorAggregate + * @return \ArrayIterator + */ + function getIterator() { + return new \ArrayIterator(array_combine( + $this->foreignColumns, $this->referencedColumns)); + } }