X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fpq-gateway;a=blobdiff_plain;f=lib%2Fpq%2FGateway%2FTable%2FReference.php;h=d91d9c7c0d31078436bf42b87ad771daf6c85730;hp=6f8e29c29caf5d116d2622a08c0b26d99d4fd70f;hb=d3a497c12f60567cbb20ea626fd909f94955ebac;hpb=51f1ba99cc3bd04f06db34c145952494779a6e48 diff --git a/lib/pq/Gateway/Table/Reference.php b/lib/pq/Gateway/Table/Reference.php index 6f8e29c..d91d9c7 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); + $this->foreignTable = $ref["foreignTable"]; + $this->foreignColumns = $ref["foreignColumns"]; + $this->referencedTable = $ref["referencedTable"]; + $this->referencedColumns = $ref["referencedColumns"]; } /** @@ -50,4 +50,24 @@ class Reference static function __set_state($state) { return new static($state); } + + /** + * Compose an identifying name + * @param array $ref + * @return string + */ + static function name($ref) { + return implode("_", array_map(function($ck, $cr) { + return preg_replace("/_$cr\$/", "", $ck); + }, $ref["foreignColumns"], $ref["referencedColumns"])); + } + + /** + * Implements IteratorAggregate + * @return \ArrayIterator + */ + function getIterator() { + return new \ArrayIterator(array_combine( + $this->foreignColumns, $this->referencedColumns)); + } }