Ok, jadi saya belum mendapat banyak tanggapan dari ini, jadi mulai menggali sekitar saya mampu menjawab setengah dari pertanyaan yang saya tanyakan.
Melakukan "grep" sederhana dan menemukan kelas berikut yang tersimpan di folder lib: lib/Magento/Db/Sql/Trigger.php
Cukup lurus ke depan dan inilah yang telah saya buat yang berfungsi (dapat ditempatkan di skrip instal / peningkatan):
<?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();
Saya telah menambahkan komentar untuk memberikan ide dasar tentang apa yang dapat digunakan, kalau tidak sebaiknya periksa kelas sendiri. Tubuh pada dasarnya adalah SQL mentah tetapi dapat dikompilasi menggunakan metode konvensional Magento. Saya telah menggunakan SQL mentah untuk tujuan demonstrasi.
Itu keluar dari jalan, saya masih mencoba menemukan cara untuk menerapkan PROSEDUR TERSIMPOR tanpa keberhasilan. Adakah yang menemukan sesuatu seperti ini di Magento yang mungkin tersimpan untuk digunakan di masa depan?
.sql
file versi dengan prosedur tersimpan Anda. Lebih detail: alanstorm.com/magento_setup_resources$trigger->setName('my_trigger_name')
dan menambahkan$this->getConnection()->dropTrigger($trigger->getName())
sebelum$this->getConnection()->query($triggerCreateQuery);