LazyRecord\TableParser\MysqlTableParser::queryReferences PHP Method

queryReferences() public method

public queryReferences ( $table )
    public function queryReferences($table)
    {
        $stm = $this->connection->query('SELECT DATABASE() FROM DUAL');
        $dbName = $stm->fetchColumn(0);
        $sql = 'SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
        FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
        WHERE TABLE_SCHEMA = :table_schema
            AND TABLE_NAME = :table_name
        ';
        $stm = $this->connection->prepare($sql);
        $stm->execute([':table_schema' => $dbName, ':table_name' => $table]);
        $rows = $stm->fetchAll(PDO::FETCH_OBJ);
        $references = [];
        foreach ($rows as $row) {
            // CONSTRAINT_NAME = [PRIMARY, child_ibfk_1 ...  ]
            $references[$row->COLUMN_NAME] = $this->transformReferenceInfo($row);
        }
        return $references;
    }

Usage Example

 public function testReferenceQuery()
 {
     $schema = new \AuthorBooks\Model\AuthorSchema();
     $this->updateSchemaFiles($schema);
     $this->buildSchemaTable($this->conn, $this->queryDriver, $schema);
     $schema = new \AuthorBooks\Model\BookSchema();
     $this->updateSchemaFiles($schema);
     $this->buildSchemaTable($this->conn, $this->queryDriver, $schema);
     $schema = new \AuthorBooks\Model\AuthorBookSchema();
     $this->updateSchemaFiles($schema);
     $this->buildSchemaTable($this->conn, $this->queryDriver, $schema);
     $parser = new MysqlTableParser($this->conn, $this->queryDriver);
     $references = $parser->queryReferences('books');
     $this->assertNotEmpty($references);
     $this->assertEquals('publishers', $references['publisher_id']->table);
     $this->assertEquals('id', $references['publisher_id']->column);
 }