Magento 2重新索引返回没有这样的实体


14

我已成功将目录从Magento 1.9.2.3迁移到Magento 2.0.2。迁移之后,我使用命令进行了重新索引php bin/magento indexer:reindex

除索引catalog_category_productcatalog_product_categoryNo such entity.在shell中返回和Reindex Required在admin中返回通知外,所有索引均已成功重新索引。我检查了var/log/但没有错误。

结果,产品被添加到后端的类别中,但是类别在前端显示为空。

什么可能导致此问题?我该如何调试?


Answers:


7

除了Raphael:

我通过出于调试目的(通过xdebug或旧的转储)更改异常构造函数来调试了此代码。现在更改异常的构造(文件为\lib\internal\Magento\Framework\Exception\NoSuchEntityException.php

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

之后,向上堆栈并检查给定的参数(args在调试回溯中也可用,但是转储magento对象并不是真正的浏览器友好)。

得出的结论是,它在storeGroupRepository找不到组ID的位置。进入商店表,并在商店表中看到几行引用store_groupstore_group表中没有的行(相关表中不存在商店组)。

删除了有问题的存储行,此后错误就消失了。

但是,请记住,它也可能是由于其他表/其他原因。例如网站,商店本身或商店组(在这种情况下)。因此,这始终是您必须执行的少量搜索。

还发现有很多对这些存储的引用,并且还在数据库中手动删除了它们。这可能是一个繁琐的工作,但可以解决问题。

并且不要忘记删除您的hack。


您为什么不使用xdebug呢?
路加福音

@TimVroom我也有同样的错误。请帮助我 magento.stackexchange.com/q/236187/24878
akgola

11

不知道这是否为时已晚,但是当我拥有时,它似乎是由某些需要设置为0的实体ID引起的。

该脚本为我工作:

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;

希望能帮助到你。


这对我帮助很大,谢谢您的分享!
favo

这对我也有用:)
Owen

3

好的,因此No such entity.错误消息来自\lib\internal\Magento\Framework\Exception\NoSuchEntityException.php

此类是Magento的自定义异常类,在Magento 2中经常使用。

每当您看到如下代码:

catch (NoSuchEntityException $e)

要么

throw NoSuchEntityException;

正在使用此类。

您遇到的问题是,很难从哪里抛出该异常。

因此,要缩小一点,您可以开始调试与失败的索引相关的两个类:

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_product索引
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_category索引

幸运的是,第二个扩展了第一个,因此您有了一个起点。

您必须记住,每个索引器类都使用操作行类来处理重新索引编制:

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

对我来说,您应该开始调试,因为这些操作行类是直接为这两个索引重新编制索引的直接类。

我真的希望它能帮助您找到问题所在。


嗨,@ Raphael,我在迁移后创建客户时也遇到类似的问题。请帮助我 magento.stackexchange.com/q/236187/24878
akgola

0

尝试所有内容后,此功能对我有用。

假设您的网站位于Developer Mode,您可以将其更改为Production Mode并清除/刷新缓存,然后再切换回Developer Mode

我最近在将数据库从一台服务器移到另一台服务器时,在前端遇到了这个问题。我设法通过这种方式解决了。

希望这可以帮助一人。



0

就我而言,此错误是针对多商店,多域设置的。Magento会截断商店代码。如果要将域映射到存储代码,请确保存储代码与index.php中指定的路由(或映射的任何地方)匹配。在管理员中,在“商店” >“ 所有商店 ” 下进行检查。检查您的网站,商店并查看商店代码。

一旦我意识到Magento删减了商店代码,我就在映射中进行了相同的调整,一切都重新开始了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.