5

Createat.phpを変更しています。ここで、ソースを確認できます。

簡単な概要:

$select->from(array('o' => $this->getTable('sales/order')), $columns)
  ->join(array('oi' => $selectOrderItem), 'oi.order_id = o.entity_id', array())
  ->where('o.state NOT IN (?)', array(
    Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
    Mage_Sales_Model_Order::STATE_NEW
  ));
...
$select->where('o.channel_name IS NULL');
$adapter->query($select
  ->insertFromSelect($this->getMainTable(), array_keys($columns)));

したがって、この時点ではすべてが良好です。私のsales_order_aggregated_createdテーブルには、すべての「Webサイト」の売上合計が含まれるようになりました。

$select->reset('where');
$select->where('o.channel_name = ?', 'Amazon');
$adapter->query($select
  ->insertFromSelect($this->getMainTable(), array_keys($columns)));

これが私の問題です。reset('where')して別のchannel_nameでフィルタリングし、新しい行をテーブルに挿入しようとすると、insertFromSelect()関数は "INSERT ... ON DUPLICATE KEY UPDATE"を使用して、値を上書きします前のクエリのテーブル内。

重複時に更新されない$select->someFunction()はありますか、またはinsertFromSelect()関数の定義はどこにありますか?または、おそらくこれを行う別の方法がありますか?

4

1 に答える 1

1

Varien_Db_Adapter_Interfaceデフォルトの動作を無効にするINSERT_ON_DUPLICATEフラグとして渡すことができる定数があります。insertFromSelect()ON DUPLICATE KEY UPDATE

$adapter->query(
    $adapter->insertFromSelect(
        $select,
        $this->getMainTable(),
        array_keys($columns),
        Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE
    )
);
于 2018-11-19T11:09:57.617 に答える