Magento 2 reindex return Tidak ada entitas seperti itu

14

Saya telah berhasil memigrasi katalog dari Magento 1.9.2.3 ke Magento 2.0.2. Setelah migrasi, saya melakukan pengindeksan ulang menggunakan perintah php bin/magento indexer:reindex.

Semua berhasil diindeks ulang, kecuali indeks catalog_category_productdan catalog_product_category, kembali No such entity.di shell dan pemberitahuan Reindex Requireddi admin. Saya sudah memeriksa var/log/tetapi tidak ada kesalahan.

Akibatnya, produk ditambahkan ke kategori di backend tetapi kategori muncul kosong di frontend.

Apa yang mungkin menyebabkan masalah ini? Bagaimana saya bisa men-debug?

Gerard de Visser
sumber

Jawaban:

7

Selain Raphael:

Saya mendebug kode ini dengan mengubah konstruktor pengecualian untuk tujuan debug (baik dengan xdebug atau dump lama). Ubah konstruk pengecualian untuk saat ini (file tersebut \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

$trace = debug_backtrace();
var_dump($trace[1]['class'] . '::' . $trace[1]['function'] . '('.$trace[1]['line'] .')';
die();

Setelah itu naik satu tumpukan dan periksa argumen yang diberikan (args juga tersedia di debug backtrace, tetapi membuang objek magento tidak benar-benar ramah browser).

Datang pada kesimpulan, bahwa itu adalah di storeGroupRepositorymana ia tidak dapat menemukan id grup. Masuk ke tabel toko dan melihat beberapa baris di tabel toko yang mereferensikan store_groupyang tidak ada di store_grouptabel (grup toko tidak ada di tabel yang relevan).

Menghapus garis toko yang salah dan kesalahan telah hilang sejak saat itu.

Tapi, perlu diingat bahwa bisa juga di tabel berbeda / alasan lain. misalnya situs web, simpan sendiri atau simpan grup dalam hal ini. Sehingga selalu ada sedikit pencarian yang harus Anda lakukan sendiri.

Juga menemukan bahwa ada cukup banyak referensi ke toko-toko ini dan juga menghapusnya secara manual di db. Ini bisa menjadi pekerjaan yang membosankan tetapi akan menyelesaikan masalah.

Dan jangan lupa untuk menghapus retas Anda.

TimVroom
sumber
mengapa Anda tidak menggunakan xdebug saja?
Lukas
@TimVroom Saya juga memiliki kesalahan yang sama. Tolong bantu saya magento.stackexchange.com/q/236187/24878
akgola
11

Tidak yakin apakah ini terlambat untuk ditambahkan, tetapi ketika saya memilikinya, ini tampaknya disebabkan oleh beberapa id entitas yang perlu diatur ke 0.

Skrip ini berfungsi untuk saya:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

Semoga ini bisa membantu.

Adam Stacey
sumber
ini banyak membantu saya, terima kasih sudah berbagi!
favo
Ini juga berhasil untuk saya :)
Owen
3

Oke, jadi No such entity.pesan kesalahannya berasal \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php.

Kelas ini adalah kelas pengecualian khusus Magento dan banyak digunakan di Magento 2.

Setiap kali Anda melihat kode seperti:

catch (NoSuchEntityException $e)

Atau

throw NoSuchEntityException;

Kelas ini sedang digunakan.

Masalah dalam kasus Anda adalah sulit untuk mencari tahu dari mana pengecualian itu dilemparkan.

Jadi untuk mempersempitnya, Anda dapat mulai men-debug dua kelas yang terkait dengan indeks Anda yang gagal:

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_product index
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_category indeks

Untungnya, yang kedua memperpanjang yang pertama sehingga Anda punya satu titik awal.

Anda harus ingat bahwa setiap kelas pengindeks ini menggunakan kelas baris tindakan untuk memproses pengindeksan ulang:

  • Magento\Catalog\Model\Indexer\Product\Category\Action\Rows
  • Magento\Catalog\Model\Indexer\Category\Product\Action\Rows

Bagi saya di situlah Anda harus mulai men-debug karena kelas-kelas aksi baris adalah kelas langsung yang mengindeks ulang dua indeks.

Saya sangat berharap ini akan membantu Anda menemukan masalah Anda.

Raphael di Digital Pianism
sumber
Hai @Raphael, saya memiliki masalah serupa untuk pembuatan pelanggan setelah migrasi. Tolong bantu saya magento.stackexchange.com/q/236187/24878
akgola
0

INI BEKERJA BAGI SAYA SETELAH MENCOBA SEGALA SESUATU.

Dengan asumsi situs Anda masuk Developer Mode, Anda dapat mengubahnya ke Production Modedan menghapus / membersihkan cache dan kemudian beralih kembali ke Developer Mode.

Saya punya masalah ini di ujung depan, karena saya baru-baru ini memindahkan database dari satu server ke yang lain. Saya telah berhasil menyelesaikannya dengan cara ini.

HARAPAN BANTUAN INI BEBERAPA SATU.

Thowzif
sumber
0

Kesalahan ini, dalam kasus saya, adalah untuk penyiapan multi-store, multi-domain. Magento memotong kode toko. Jika Anda memetakan domain untuk menyimpan kode, pastikan kode toko cocok dengan rute yang ditentukan dalam index.php (atau di mana pun Anda memetakan). Di admin periksa di "Toko" > " Semua Toko ." Periksa situs web Anda, toko & toko melihat kode toko.

Begitu saya menyadari Magento memotong kode toko yang saya masukkan dan membuat penyesuaian yang sama dalam pemetaan & semuanya mulai bekerja lagi.

Taylor Hunt
sumber