65 private $ignoredUpdateColumns = [];
88 $ignoredUpdateColumns = []
90 $this->connection =
$resource->getConnection();
97 $this->ignoredUpdateColumns = $ignoredUpdateColumns;
107 foreach (Trigger::getListOfEvents() as $event) {
108 $triggerName = $this->getAfterEventTriggerName($event);
110 $trigger = $this->triggerFactory->create()
111 ->setName($triggerName)
112 ->setTime(Trigger::TIME_AFTER)
114 ->setTable($this->resource->getTableName($this->tableName));
119 foreach ($this->getLinkedViews() as
$view) {
124 $this->connection->dropTrigger(
$trigger->getName());
125 $this->connection->createTrigger(
$trigger);
136 public function remove()
138 foreach (Trigger::getListOfEvents() as $event) {
139 $triggerName = $this->getAfterEventTriggerName($event);
141 $trigger = $this->triggerFactory->create()
142 ->setName($triggerName)
143 ->setTime(Trigger::TIME_AFTER)
145 ->setTable($this->resource->getTableName($this->getTableName()));
148 foreach ($this->getLinkedViews() as
$view) {
153 $this->connection->dropTrigger(
$trigger->getName());
157 $this->connection->createTrigger(
$trigger);
169 protected function getLinkedViews()
171 if (!$this->linkedViews) {
174 foreach ($viewList as
$view) {
181 foreach ($view->getSubscriptions() as $subscription) {
185 $this->linkedViews[] =
$view;
202 case Trigger::EVENT_INSERT:
203 $trigger =
"INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);";
205 case Trigger::EVENT_UPDATE:
207 $trigger =
"INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);";
208 if ($this->connection->isTableExists(
$tableName) &&
209 $describe = $this->connection->describeTable(
$tableName)
211 $columnNames = array_column($describe,
'COLUMN_NAME');
212 $columnNames = array_diff($columnNames, $this->ignoredUpdateColumns);
217 'NEW.%1$s <=> OLD.%1$s',
222 "IF (%s) THEN %s END IF;",
229 case Trigger::EVENT_DELETE:
230 $trigger =
"INSERT IGNORE INTO %s (%s) VALUES (OLD.%s);";
237 $this->connection->quoteIdentifier($this->resource->getTableName(
$changelog->getName())),
238 $this->connection->quoteIdentifier(
$changelog->getColumnName()),
239 $this->connection->quoteIdentifier($this->getColumnName())
250 private function getAfterEventTriggerName($event)
252 return $this->resource->getTriggerName(
253 $this->resource->getTableName($this->getTableName()),
__construct(ResourceConnection $resource, \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory, \Magento\Framework\Mview\View\CollectionInterface $viewCollection, \Magento\Framework\Mview\ViewInterface $view, $tableName, $columnName, $ignoredUpdateColumns=[])
buildStatement($event, $changelog)