Storm\Drivers\Platforms\Mysql\Syncing\DatabaseBuilder::BuildForeignKeys PHP Метод

BuildForeignKeys() приватный Метод

private BuildForeignKeys ( Storm\Drivers\Base\Relational\Queries\IConnection $Connection, array $Columns, $DatabaseName, $TableName, array &$LoadedTables )
$Connection Storm\Drivers\Base\Relational\Queries\IConnection
$Columns array
$LoadedTables array
    private function BuildForeignKeys(IConnection $Connection, array $Columns, $DatabaseName, $TableName, array &$LoadedTables)
    {
        $ForeignKeys = [];
        $QueryBuilder = $Connection->QueryBuilder();
        $QueryBuilder->Append('SELECT C.*, R.`UPDATE_RULE`, R.`DELETE_RULE`  FROM ');
        $QueryBuilder->Append('`INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` C ');
        $QueryBuilder->Append('INNER JOIN ');
        $QueryBuilder->Append('`INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS` R ');
        $QueryBuilder->Append('ON C.`CONSTRAINT_NAME` = R.`CONSTRAINT_NAME` ');
        $QueryBuilder->Append('AND C.`TABLE_SCHEMA` = R.`CONSTRAINT_SCHEMA` ');
        $QueryBuilder->Append('AND C.`TABLE_NAME` = R.`TABLE_NAME` ');
        $QueryBuilder->Append('WHERE TRUE ');
        $QueryBuilder->AppendValue('AND C.`REFERENCED_TABLE_SCHEMA` = # ', $DatabaseName);
        $QueryBuilder->Append('AND C.`REFERENCED_TABLE_NAME` IS NOT NULL ');
        $QueryBuilder->Append('AND C.`REFERENCED_COLUMN_NAME` IS NOT NULL ');
        $QueryBuilder->AppendValue('AND C.`TABLE_SCHEMA` = # ', $DatabaseName);
        $QueryBuilder->AppendValue('AND C.`TABLE_NAME` = # ', $TableName);
        $ForeignKeyRowGroups = $this->GroupColumnsByKey($QueryBuilder->Build()->Execute()->FetchAll(), 'CONSTRAINT_NAME');
        foreach ($ForeignKeyRowGroups as $ForeignKeyRows) {
            $ForeignKeys[] = $this->BuildForeignKey($Connection, $DatabaseName, $Columns, $ForeignKeyRows, $LoadedTables);
        }
        return $ForeignKeys;
    }