33 private $resourceConnection;
50 $adapter = $this->resourceConnection->getConnection(
51 $foreignKey->getTable()->getResource()
53 $referenceTable = $this->resourceConnection->getTableName(
54 $foreignKey->getReferenceTable()->
getName()
57 $foreignKeySql = sprintf(
58 "CONSTRAINT %s %s (%s) REFERENCES %s (%s) %s",
60 self::FOREIGN_KEY_STATEMENT,
62 $adapter->quoteIdentifier($referenceTable),
63 $adapter->quoteIdentifier($foreignKey->getReferenceColumn()->
getName()),
64 $foreignKey->getOnDelete() ? sprintf(
" ON DELETE %s", $foreignKey->getOnDelete()) :
'' 67 return $foreignKeySql;
75 if (!isset(
$data[
'Create Table'])) {
77 new \
Magento\Framework\
Phrase(
'Can`t read foreign keys from current database')
81 $createMySQL =
$data[
'Create Table'];
83 $regExp =
'#,\s*CONSTRAINT\s*`([^`]*)`\s*FOREIGN KEY\s*?\(`([^`]*)`\)\s*' 84 .
'REFERENCES\s*(`([^`]*)`\.)?`([^`]*)`\s*\(`([^`]*)`\)\s*' 85 .
'(\s*ON\s+DELETE\s*(RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT))?' 86 .
'(\s*ON\s+UPDATE\s*(RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT))?#';
89 if (preg_match_all($regExp, $createMySQL, $matches, PREG_SET_ORDER)) {
90 foreach ($matches as $match) {
94 'column' => $match[2],
95 'referenceTable' => $match[5],
96 'referenceColumn' => $match[6],
97 'onDelete' => isset($match[7]) ? $match[8] :
'NO ACTION'
fromDefinition(array $data)
__construct(ResourceConnection $resourceConnection)
toDefinition(ElementInterface $foreignKey)
const FOREIGN_KEY_STATEMENT