SqlParser\Utils\Table::getForeignKeys PHP Method

getForeignKeys() public static method

Gets the foreign keys of the table.
public static getForeignKeys ( CreateStatement $statement ) : array
$statement SqlParser\Statements\CreateStatement The statement to be processed.
return array
    public static function getForeignKeys($statement)
    {
        if (empty($statement->fields) || !is_array($statement->fields) || !$statement->options->has('TABLE')) {
            return array();
        }
        $ret = array();
        foreach ($statement->fields as $field) {
            if (empty($field->key) || $field->key->type !== 'FOREIGN KEY') {
                continue;
            }
            $columns = array();
            foreach ($field->key->columns as $column) {
                $columns[] = $column['name'];
            }
            $tmp = array('constraint' => $field->name, 'index_list' => $columns);
            if (!empty($field->references)) {
                $tmp['ref_db_name'] = $field->references->table->database;
                $tmp['ref_table_name'] = $field->references->table->table;
                $tmp['ref_index_list'] = $field->references->columns;
                if ($opt = $field->references->options->has('ON UPDATE')) {
                    $tmp['on_update'] = str_replace(' ', '_', $opt);
                }
                if ($opt = $field->references->options->has('ON DELETE')) {
                    $tmp['on_delete'] = str_replace(' ', '_', $opt);
                }
                // if (($opt = $field->references->options->has('MATCH'))) {
                //     $tmp['match'] = str_replace(' ', '_', $opt);
                // }
            }
            $ret[] = $tmp;
        }
        return $ret;
    }

Usage Example

Example #1
0
 /**
  * @dataProvider getForeignKeysProvider
  */
 public function testGetForeignKeys($query, array $expected)
 {
     $parser = new Parser($query);
     $this->assertEquals($expected, Table::getForeignKeys($parser->statements[0]));
 }