回答:
わかりました。これからはあまり反応がなかったので、自分の周りを掘り始めたので、質問の半分に答えることができました。
単純な「grep」を実行して、libフォルダーに隠れている次のクラスに遭遇しました。 lib/Magento/Db/Sql/Trigger.php
その非常に単純明快で、これが機能することを思いついたものです(インストール/アップグレードスクリプトに配置できます)。
<?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();
コメントを追加して、何が使用できるかについての基本的な考え方を説明します。それ以外の場合は、クラスを自分で確認してください。本体は基本的に生のSQLですが、Magentoの従来の方法を使用してコンパイルできます。デモ目的で生のSQLを使用しました。
それが邪魔になっても、私はまだ成功せずにストアドプロシージャを実装する方法を見つけようとしています。このようなMagentoで、将来使用するために隠されている可能性があるものに遭遇したことがありますか?
$trigger->setName('my_trigger_name')
追加できます$this->getConnection()->dropTrigger($trigger->getName())
$this->getConnection()->query($triggerCreateQuery);
.sql
方法は、ストアドプロシージャでバージョンファイルを使用することです。詳細:alanstorm.com/magento_setup_resources