/** * Returns a list of foreign keys for a table. */ public function getForeignKeys($table) { $meta = array(); switch ($this->connection->getAttribute(PDO::ATTR_DRIVER_NAME)) { case 'mysql': foreach ($this->loadKeys() as $info) { if ($info['table_name'] === $table) { $meta[] = array('table' => $info['table_name'], 'column' => $info['column_name'], 'referenced_table' => $info['referenced_table_name'], 'referenced_column' => $info['referenced_column_name']); } } return $meta; case 'pgsql': list($schema, $table) = stristr($table, '.') ? explode(".", $table) : array('public', $table); $result = $this->connection->query("SELECT kcu.column_name AS column_name, ccu.table_name " . "AS referenced_table_name, ccu.column_name AS referenced_column_name " . "FROM information_schema.table_constraints AS tc " . "JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name " . "JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name " . "WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='" . $table . "' AND tc.table_schema = '" . $schema . "'"); $result->setFetchMode(PDO::FETCH_ASSOC); foreach ($result as $row) { $meta[] = array('table' => $table, 'column' => $row['column_name'], 'referenced_table' => $row['referenced_table_name'], 'referenced_column' => $row['referenced_column_name']); } return $meta; case 'sqlite': $sql = "PRAGMA foreign_key_list(" . $this->connection->quoteName($table) . ")"; $result = $this->connection->query($sql); $result->setFetchMode(PDO::FETCH_ASSOC); foreach ($result as $row) { $meta[] = array('table' => $table, 'column' => $row['from'], 'referenced_table' => $row['table'], 'referenced_column' => $row['to']); } return $meta; default: throw new \RuntimeException("Meta not supported"); } }