X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fpq-gateway;a=blobdiff_plain;f=lib%2Fpq%2FGateway%2FTable.php;h=2789963a35f2ee0ac38620820004a84d0979d35e;hp=472d0038008a129184d6815ea232e75dc14fcadd;hb=3aa333045c0bb93b83e87e190b4ed49333d106f0;hpb=ccdcd2977c8bdc7c74b89b2fb7c2ea46479692b8 diff --git a/lib/pq/Gateway/Table.php b/lib/pq/Gateway/Table.php index 472d003..2789963 100644 --- a/lib/pq/Gateway/Table.php +++ b/lib/pq/Gateway/Table.php @@ -360,10 +360,12 @@ class Table implements \SplSubject return $this->onResult(null); } - return $this->find( - array($rel->foreignColumn . "=" => $foreign->{$rel->referencedColumn}), - $order, $limit, $offset - ); + $where = array(); + foreach ($rel as $key => $ref) { + $where["$key="] = $foreign->$ref; + } + + return $this->find($where, $order, $limit, $offset); } /** @@ -379,9 +381,11 @@ class Table implements \SplSubject return $this->onResult(null); } - return $this->find( - array($rel->referencedColumn . "=" => $foreign->{$rel->foreignColumn}) - ); + $where = array(); + foreach ($rel as $key => $ref) { + $where["$ref="] = $foreign->$key; + } + return $this->find($where); } /** @@ -401,12 +405,27 @@ class Table implements \SplSubject if (!($relation instanceof Table\Reference)) { $relation = static::resolve($relation)->getRelation($this->getName()); } - $query->write("JOIN", $relation->foreignTable)->write("ON")->criteria( - array( - "{$relation->referencedTable}.{$relation->referencedColumn}=" => - new QueryExpr("{$relation->foreignTable}.{$relation->foreignColumn}") - ) - ); + if ($this->getName() === $relation->foreignTable) { + $query->write("JOIN", $relation->referencedTable)->write("ON"); + foreach ($relation as $key => $ref) { + $query->criteria( + array( + "{$relation->referencedTable}.{$ref}=" => + new QueryExpr("{$relation->foreignTable}.{$key}") + ) + ); + } + } else { + $query->write("JOIN", $relation->foreignTable)->write("ON"); + foreach ($relation as $key => $ref) { + $query->criteria( + array( + "{$relation->referencedTable}.{$ref}=" => + new QueryExpr("{$relation->foreignTable}.{$key}") + ) + ); + } + } } if ($where) { $query->write("WHERE")->criteria($where);