Mengapa dibuat_at (tabel customer_entity) diatur untuk berubah saat pembaruan?


19

Ketika melihat struktur customer_entitytabel, saya melihat created_atbidang memiliki atribut ini: on update CURRENT_TIMESTAMP. Jadi, setiap kali baris diperbarui, created_atcap waktu akan berubah.

Sepertinya atribut ini harus ada di updated_atlapangan, bukan di created_atlapangan. Saya tahu jarang bahwa tabel ini secara langsung dimodifikasi karena struktur EAV, tetapi tampaknya masih salah untuk pernah memodifikasi created_atbidang.

Apakah ada alasan untuk struktur tabel ini, atau hanya bug?

Sunting: Saya menemukan laporan bug yang dikonfirmasi dari Magento untuk ini. Edisi # 27944. Sayangnya, Anda harus masuk untuk melihatnya. http://www.magentocommerce.com/bug-tracking/issue?issue=13882


2
Pertanyaan bagus. Saya mungkin menambahkan bahwa tabel ini berada dalam situasi yang sama: cron_schedule, api_user, admin_user, customer_entity_address, downloadable_link_purchased, downloadable_link_purchased_item, index_event, eav_entity log_customer, sales_flat_quote_address, sales_flat_quote, sales_flat_quote_address_item, sales_flat_quote_payment, sales_flat_quote_shipping_rate, sales_recurring_profile. Mungkin ada yang lain juga. Saya agak kehilangan minat pada satu titik, saat mencari mereka.
Marius

Saya perhatikan sales_flat_quotedulu, lalu diperiksa customer_entity. Kami hanya memperhatikannya karena beberapa laporan kami tidak masuk akal. Apakah ini benar-benar bug?
Ryre

Saya percaya itu hanya bug.
Dmytro Zavalkin

Apakah ada cara lain untuk mengatasi itu? Maaf saya seorang pemula dan menghadapi masalah yang sama karena saya memutakhirkan dari 1.7.0.2 ke 1.8.1 Saya hampir takut mencoba mengedit bidang dalam database. Semoga Anda bisa membantu !! Terima kasih Jinal
Jinal

@Jinal, opsi terbaik Anda adalah membuat perubahan melalui mysql. Periksa jawaban Marius untuk detail lebih lanjut, dan pastikan untuk membuat cadangan database Anda terlebih dahulu!
Ryre

Jawaban:


22

Inilah yang saya temukan. Masalahnya hanya muncul di Magento CE 1.6+ (dan versi EE yang cocok). Itu karena skrip install / upgrade baru menggunakan DDL dalam kombinasi dengan mysql.
Dalam versi sebelum 1.6 ini adalah bagaimana created_atdan updated_atkolom terlihat seperti:

`created_at` datetime NOT NULL default '0000-00-00 00:00:00',
`updated_at` datetime NOT NULL default '0000-00-00 00:00:00', 

Dalam 1.6+ ddl terlihat seperti ini:

    ->addColumn('created_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
        'nullable'  => false,
        ), 'Created At')
    ->addColumn('updated_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
        'nullable'  => false,
        ), 'Updated At')

dan menghasilkan:

`created_at` timestamp NOT NULL COMMENT 'Created At',
`updated_at` timestamp NOT NULL COMMENT 'Updated At',

Perbedaannya adalah bahwa defaultnilainya hilang.
Dan, seperti yang dijelaskan di sini ,

Dengan DEFAULT CURRENT_TIMESTAMP atau ON UPDATE CURRENT_TIMESTAMP, itu sama dengan menetapkan DEFAULT CURRENT_TIMESTAMP dan ON UPDATE CURRENT_TIMESTAMP.

Dan karena MySQL hanya mengizinkan satu kolom stempel waktu dengan CURRENT_TIMESTAMPsebagai default atau untuk on update, created_atkolom berakhir dengan seperti ini.

Ini jelas merupakan bug Magento.


1
Apakah ada pembaruan dari Magento tentang ini? sepertinya bug tersebut masih dalam keadaan baru.
Laura

@Laura, tautan pelacakan kutu di jawabannya masih terbuka (hampir 2 tahun sekarang!).
Ryre

2
Di Magento 1.9, kolom Created_at mengatakan: created_attimestamp BUKAN NULL DEFAULT CURRENT_TIMESTAMP TENTANG PEMBARUAN CURRENT_TIMESTAMP KOMENTAR 'Created At'. Dan dalam catatan rilis, disebutkan bahwa "Pelanggan sejak" tanggal benar. "
MagePsycho

Untuk EE itu mempengaruhi versi SEBELUM 1.6, saya punya EE 1.13 dan kelihatannya seperti ini: `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Created At'
doc_id

4

Pertama-tama, baca jawaban Marius untuk melihat apa yang terjadi di database.

Saya hanya ingin menyebutkan bahwa sebagian besar pengembang tidak akan mengalami masalah ini jika model mereka benar-benar meluas Mage_Core_Model_Abstract. Tumpukannya terlihat seperti ini:

  1. Your_Model::save panggilan
  2. Mage_Core_Model_Abstract::save panggilan
  3. Mage_Eav_Model_Entity_Abstract::save panggilan
  4. Mage_Eav_Model_Entity_Abstract::_beforeSave panggilan
  5. Mage_Eav_Model_Entity_Abstract::walkAttributes panggilan
  6. Mage_Eav_Model_Entity_Attribute_Backend_Time_Created::beforeSave

Ini melakukan hal berikut:

$attributeCode = $this->getAttribute()->getAttributeCode();
$date = $object->getData($attributeCode);
if (is_null($date)) {
    if ($object->isObjectNew()) {
        $object->setData($attributeCode, Varien_Date::now());
    }
}

Harap perhatikan bahwa ini dapat memiliki masalah untuk beberapa lokal di CE> = 1.8.x dan EE> = 1.13.x.


2

Kami juga menemukan bug ini, dan berpikir bahwa itu didasarkan pada perbedaan antara pengkodean tanggal AS dan Eropa.

Di Amerika Serikat, tanggal ditulis MM-DD-YYYY. (02-10-2015 = 10 Feb 2015). Tetapi di Eropa dan banyak tempat lainnya, kurma ditulis DD-MM-YYYY. (02-10-2015 = 2 Oktober 2015, atau 2 Oktober 2015).

Sementara Magento berbasis di AS, sebagian besar pengembangan dilakukan oleh programmer di Ukraina. 

Kami telah memperbaiki bug ini dengan ekstensi Magento gratis (sehingga Anda tidak perlu mengubah Kode Inti Magento). Kami telah memasangnya di situs kami sebagai unduhan gratis: http://www.CustomerParadigm.com/download/Magento-Date-Switch-Fix-Extension.zip

Saya telah membahas ini secara lebih rinci di blog kami di sini: http://www.customerparadigm.com/magento-bug-magento-customer-create-date-juxtaposition/


1
Posting blog dan modul baru saja ditarik dari posting SE saya di sini: magento.stackexchange.com/a/31225
Tyler V.

-1

ce 1.9 telah memperbaiki bug di ce 1.8.1 Di bawah ini adalah diff: masukkan deskripsi gambar di sini


1
Kode baru di sini bukan perbaikan untuk masalah ini. Ini hanya memvalidasi format "DDDD-DD-DD DD: DD: DD", atau mengembalikan nol. Nol itu masih akan mengenai database dan menjadi nilai default kolom apa pun.
Tyler V.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.