Magento - Veri veritabanına takılı değil, ancak kimliği autoincremented edilir

2 Cevap php

Ben Magento için yeni bir ödeme modülü üzerinde çalışıyorum ve ben izah edilemez bir sorun rastlamak var. Kredi kartı sonra çalışır Aşağıdaki kodu doğrulanır:

    $table_prefix = Mage::getConfig()->getTablePrefix();
    $tableName = $table_prefix.'authorizecim_magento_id_link';

    $resource = Mage::getSingleton('core/resource');
    $writeconnection = $resource->getConnection('core_write');

    $acPI = $this->_an_customerProfileId;
    $acAI = $this->_an_customerAddressId;
    $acPPI = $this->_an_customerPaymentProfileId;

    $sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')";
    $writeconnection->query($sql);

    $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')";
    $writeconnection->query($sql);

    $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')";
    $writeconnection->query($sql);

Ben SQL sorguları, doğru yazılmış ve hiçbir hata verdiğini kundakçı ve FirePHP kullanarak doğruladıktan.

Burada tek şey veritabanını kontrol ettikten ve değiştirmemesi değeri kodun her kaçak artırılır olmasıdır. Ancak, hiçbir satır veritabanına eklenen. Ben doğrudan ilk yazılmasından sonra bir die(); deyimini ekleyerek bu doğruladıktan.

Neden bu herhangi bir fikir oluştuğunu olurdu?

Config.xml göreceli kısmı şudur:

<config>
    <global>
        <models>
            <authorizecim>
                <class>CPAP_AuthorizeCim_Model</class>
            </authorizecim>
            <authorizecim_mysql4>
                <class>CPAP_AuthorizeCim_Model_Mysql4</class>
                <entities>
                    <anlink>
                        <table>authorizecim_magento_id_link</table>
                    </anlink>
                </entities>
                <entities>
                    <antypes>
                        <table>authorizecim_magento_types</table>
                    </antypes>
                </entities>
            </authorizecim_mysql4>
        </models>
        <resources>
            <authorizecim_setup>
                <setup>
                    <module>CPAP_AuthorizeCim</module>
                    <class>CPAP_AuthorizeCim_Model_Resource_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </authorizecim_setup>
            <authorizecim_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </authorizecim_write>
            <authorizecim_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </authorizecim_read>
        </resources>
    </global>
</config>

Edit: The query to create the table as it stands is:

CREATE TABLE `mag_authorizecim_magento_id_link` (
  `link_id` INT(11) NOT NULL AUTO_INCREMENT,
  `magCID` INT(11) NOT NULL,
  `anCID` INT(11) NOT NULL,
  `anOID` INT(11) NOT NULL,
  `anObjectType` INT(11) NOT NULL,
  PRIMARY KEY  (`link_id`)
) ENGINE=INNODB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8

2 Cevap

Eğer komut işlemek eksik gibi görünüyor.

->save()

.. Falan

Koduna kazma ve her şeyi ile arama yaptıktan sonra, ben Magento veritabanı bağlantıları için bir işlem modeli kullanır fark etti. Sonuç olarak, Imre L doğru fikir, ancak yanlış kod vardı.

Bir deneme olarak, ben bu kodu değişti:

$sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')";
$writeconnection->query($sql);

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')";
$writeconnection->query($sql);

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')";
$writeconnection->query($sql);

Bunun için:

$sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3'); commit;";
$writeconnection->query($sql);

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2'); commit;";
$writeconnection->query($sql);

$sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1'); commit;";
$writeconnection->query($sql);

Şaşırtıcı bir şekilde, bu çalıştı. Yeni değerler veritabanında ortaya çıktı. (MySQL işlemlerini desteklediğini fark etmedi)

Somewhere benim yeni kod, ben çalıştırmak için taahhüt deyimi önlenmesi, ve bu nedenle değerleri veritabanına kaydedilen elde değildi. Ben gitmek gibi bu avlamak edecektir, ama şimdi, commit; kalmak zorunda olacaktır.

Bu çalışan yardım için teşekkürler.