2014-01-07 112 views
0

EAV表更新走的屬性我已經加入到customer_entity表中的新列名爲source,我想通過管理員的形式來維持。這意味着我將使用客戶模型來更新該值;不過,我已經瞭解到,它不適用於EAV模型。所以我不能撥打$model->setData('source')->save(),因爲這個值沒有存儲在屬性表中。跳過在Magento

你可能會問,「爲什麼不將其存儲爲一個屬性?」有幾個原因。最重要的是,我正在通過資源適配器爲報表加入表格數據。我一直在尋找寫有「萬能選擇」查詢來自兩個_entity桌子,和服務簡單的模型讀取。

因此,這裏是我的問題:

進行更改時要在Magento,Mage_Eav_Model_Entity_Abstract::walkAttributes被通過_afterSave方法引發的抽象方法的EAV模型。據我瞭解,這將調用任何註冊的後端模型來處理CRUD操作。

我不希望這種事情發生。就我而言,我正在使用Mage_Customer_Model_Entity_Customer資源模型。我打電話給其寫適配器手動執行UPDATE查詢,以維持source值。但它似乎觸發了保存附屬於該客戶的地址的呼叫。這表現爲對客戶的註冊後端模式的結果屬性被觸發:

Mycompany_Customer_Model_Entity_Customer { 

    ... 

    public function setSource($customerId,$source=null) { 
    $data=array(
     'entity_id' => $customerId, 
     'source'  => $source 
    ); 

    Mage::getSingleton('core/resource')->getConnection('core_write') 
     ->query("UPDATE `{$this->getEntityTable()}` SET `source`=? WHERE `entity_id`=?",$data); 
    } 

    ... 

} 

爲什麼會出現這種觸發屬性走?我怎樣才能防止這一點?

回答

0

就想通了。我可以從像這樣的資源連接獲得基本[PDO]連接對象:

Mage::getSingleton('core/resource')->getConnection('core_write') 
    ->getConnection() 
    ->exec('my bound query goes here'); 

所以這裏的Varien_Db_Adapter_Pdo_Mysql實例公開PDO對象爲我用,取出來Magento的控制。