Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
IncosistentReferenceDefinition.php
Go to the documentation of this file.
1 <?php
7 
15 
22 {
26  const ERROR_TYPE = 'reference_incosistence_definition';
27 
37  private function assertDefinitionEqual(Column $column, Column $referenceColumn)
38  {
42  if ($column->getType() !== $referenceColumn->getType()) {
43  return true;
44  }
45 
46  return $this->assertUnsigned($column, $referenceColumn) &&
47  $this->assertIntegersEquals($column, $referenceColumn) &&
48  $this->assertStringBinariesEqual($column, $referenceColumn);
49  }
50 
56  private function assertUnsigned(Column $column, Column $referenceColumn)
57  {
61  if ($column instanceof ColumnUnsignedAwareInterface &&
62  $column->isUnsigned() !== $referenceColumn->isUnsigned()
63  ) {
64  return false;
65  }
66 
67  return true;
68  }
69 
75  private function assertStringBinariesEqual(Column $column, Column $referenceColumn)
76  {
81  if ($column instanceof StringBinary &&
82  $column->getLength() !== $referenceColumn->getLength()
83  ) {
84  return false;
85  }
86 
87  return true;
88  }
89 
95  private function assertIntegersEquals(Column $column, Column $referenceColumn)
96  {
100  if ($column instanceof Integer &&
101  $column->getPadding() !== $referenceColumn->getPadding()
102  ) {
103  return false;
104  }
105 
106  return true;
107  }
108 
112  public function validate(Schema $schema)
113  {
114  $message = 'Column definition "%s" and reference column definition "%s" are different in tables "%s" and "%s"';
115  $errors = [];
116  foreach ($schema->getTables() as $table) {
117  foreach ($table->getReferenceConstraints() as $reference) {
118  $column = $reference->getColumn();
119  $referenceColumn = $reference->getReferenceColumn();
120 
121  if (!$this->assertDefinitionEqual($column, $referenceColumn)) {
122  $errors[] = [
123  'column' => $column->getName(),
124  'message' => sprintf(
125  $message,
126  $column->getName(),
127  $referenceColumn->getName(),
128  $column->getTable()->getName(),
129  $referenceColumn->getTable()->getName()
130  )
131  ];
132  }
133  }
134  }
135 
136  return $errors;
137  }
138 }
$message
$table
Definition: trigger.php:14
$errors
Definition: overview.phtml:9