From: Michael Wallner Date: Fri, 8 May 2015 10:10:49 +0000 (+0200) Subject: fix relation handling when source table equals foreign table X-Git-Tag: v2.1.0~2 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fpq-gateway;a=commitdiff_plain;h=3aa333045c0bb93b83e87e190b4ed49333d106f0 fix relation handling when source table equals foreign table --- diff --git a/lib/pq/Gateway/Table.php b/lib/pq/Gateway/Table.php index e365e37..2789963 100644 --- a/lib/pq/Gateway/Table.php +++ b/lib/pq/Gateway/Table.php @@ -405,14 +405,26 @@ class Table implements \SplSubject if (!($relation instanceof Table\Reference)) { $relation = static::resolve($relation)->getRelation($this->getName()); } - $query->write("JOIN", $relation->foreignTable)->write("ON"); - foreach ($relation as $key => $ref) { - $query->criteria( - array( - "{$relation->referencedTable}.{$ref}=" => - new QueryExpr("{$relation->foreignTable}.{$key}") - ) - ); + 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) {