Ok, also ich habe nicht viel Antwort darauf bekommen, also habe ich angefangen, mich umzuschauen. Ich kann die Hälfte der Frage beantworten, die ich gestellt habe.
Habe ein einfaches "grep" gemacht und bin auf die folgende Klasse gestoßen, die im lib-Ordner versteckt ist: lib/Magento/Db/Sql/Trigger.php
Es ist ziemlich einfach und hier ist, was ich mir ausgedacht habe, das funktioniert (kann in Ihr Installations- / Upgrade-Skript eingefügt werden):
<?php
/** @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();
// Trigger
$trigger = new Magento_Db_Sql_Trigger();
// Set time SQL_TIME_BEFORE / SQL_TIME_AFTER
$trigger->setTime($trigger::SQL_TIME_BEFORE);
// Set time SQL_EVENT_INSERT / SQL_EVENT_UPDATE / SQL_EVENT_DELETE
$trigger->setEvent($trigger::SQL_EVENT_INSERT);
// Set target table name
$trigger->setTarget($installer->getTable('fontera_trader/leaderboards_global_tmp'));
// Set Body
$trigger->setBody(
'INSERT INTO '.$installer->getTable('fontera_trader/leaderboards_global').'
(entity_id, customer_id , credit_value, prize_value, games_played, rank, prev_rank)
VALUES
(NEW.entity_id, NEW.customer_id, NEW.credit_value, NEW.prize_value, NEW.games_played, NEW.rank, NEW.prev_rank)
ON DUPLICATE KEY UPDATE
customer_id = NEW.customer_id,
credit_value = NEW.credit_value,
prize_value = NEW.prize_value,
games_played = NEW.games_played,
rank = NEW.rank,
prev_rank = NEW.prev_rank;
SET @r = 0;
UPDATE '.$installer->getTable('fontera_trader/leaderboards_global').'
SET
prev_rank = rank,
rank = @r:= (@r+1)
ORDER BY
credit_value
DESC;
'
);
// Assemble query, returns direct SQL for trigger
$triggerCreateQuery = $trigger->assemble();
// Adapter initiates query
$this->getConnection()->query($triggerCreateQuery);
$installer->endSetup();
Ich habe Kommentare hinzugefügt, um eine grundlegende Vorstellung davon zu geben, was verwendet werden kann. Am besten überprüfen Sie die Klasse selbst. Der Body ist im Grunde genommen Raw-SQL, kann aber mit den herkömmlichen Methoden von Magento kompiliert werden. Ich habe Raw SQL zu Demonstrationszwecken verwendet.
Ich versuche immer noch, einen Weg zu finden, um GESPEICHERTE VERFAHREN ohne Erfolg umzusetzen . Ist jemand in Magento auf so etwas gestoßen, das für die zukünftige Verwendung versteckt sein könnte?
.sql
Versionsdatei mit Ihrer gespeicherten Prozedur zu verwenden. Weitere Details: alanstorm.com/magento_setup_resources$trigger->setName('my_trigger_name')
und$this->getConnection()->dropTrigger($trigger->getName())
kurz zuvor hinzufügen$this->getConnection()->query($triggerCreateQuery);