Beispiel #1
0
 /**
  * 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");
     }
 }