diff --git a/src/Illuminate/Database/Schema/PostgresBuilder.php b/src/Illuminate/Database/Schema/PostgresBuilder.php index 73a1cf4b2eb9..5232e91da08c 100755 --- a/src/Illuminate/Database/Schema/PostgresBuilder.php +++ b/src/Illuminate/Database/Schema/PostgresBuilder.php @@ -12,11 +12,7 @@ class PostgresBuilder extends Builder */ public function hasTable($table) { - if (is_array($schema = $this->connection->getConfig('schema'))) { - $schema = head($schema); - } - - $schema = $schema ? $schema : 'public'; + [ $schema, $table ] = $this->getSchema($table); $table = $this->connection->getTablePrefix().$table; @@ -75,11 +71,7 @@ protected function getAllTables() */ public function getColumnListing($table) { - if (is_array($schema = $this->connection->getConfig('schema'))) { - $schema = head($schema); - } - - $schema = $schema ? $schema : 'public'; + [ $schema, $table ] = $this->getSchema($table); $table = $this->connection->getTablePrefix().$table; @@ -89,4 +81,28 @@ public function getColumnListing($table) return $this->connection->getPostProcessor()->processColumnListing($results); } + + /** + * Determines which schema should be used. + * + * @param string $table + * @return [ string, string ] + */ + protected function getSchema($table) + { + $table = explode('.', $table); + $schema = $this->connection->getConfig('schema'); + + if (is_array($schema)) { + if (in_array($table[0], $schema)) { // Table contains schema prefix + return [array_shift($table), implode('.', $table)]; + } + + $schema = head($schema); + } + + $schema = $schema ?: 'public'; + + return [$schema, implode('.', $table)]; + } }