AWS 上 7 台服务器上的 Magento 4 HTTPD 1 内存缓存 1个主数据库 1 个媒体数据库
上传图片有效,在管理中加载缩略图,然后在保存时导致错误: SQLSTATE[42S02]: 未找到基表或 View :1146 表 'magento.core_file_storage' 不存在
我知道 table 在那里。我能看到它。 core_file_storage ~471,510 InnoDB utf8_general_ci 2.1 GiB
有什么想法吗?有什么想法可以反弹吗?
---编辑
不再出现SQL错误,保存成功但图片为空。
---使用 local.xml 调用第二个数据库:
<media_storage>
<connection>
<host><![CDATA[127.0.0.1]]></host>
<username><![CDATA[root]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[magento]]></dbname>
<initStatements><![CDATA[SET NAMES utf8]]></initStatements>
<model><![CDATA[mysql4]]></model>
<type><![CDATA[pdo_mysql]]></type>
<pdoType><![CDATA[]]></pdoType>
<active>1</active>
</connection>
</media_storage>
最佳答案
我遇到了同样的问题并且(以某种方式)在主数据库(以及我的媒体数据库)中创建了表。这掩盖了真正的问题(为什么 Magento 在错误的数据库中寻找这些表)但一切似乎都在工作。直到……
如果您尝试一次上传多张图片,则只有第一张图片被正确存储。如果您尝试对不同的产品使用相同的文件名,这些也不会起作用。最终,我决定进行一些调试,我发现文件从表中重新加载并调用 setData($row) 以在当前实例上填充它。当它这样做时,Magento 会清除连接名称(它也存储在数据数组中)并且在您的情况下以前被称为“media_storage”。
当它试图保存这个模型时它失败了,因为它现在使用了错误的连接并且那些表不存在。如果您已完成解决方法并且它们确实存在,则该功能显然不存在并且您会丢失缩略图。如果你检查你的媒体数据库,你会看到每个文件的行,但只有第一个文件被重命名为“tmp”。
我的解决方案(目前)是将以下方法添加到 Mage/Core/Model/File/Storage/Database/Abstract.php。这确保在 setData 之后它将重置连接名称(如果已填充)。我只是简单地对此进行了测试,但到目前为止它似乎已经成功,我遇到的两个问题都已得到解决。
/**
* Ensure that the connection name is retained if the set data is setting the entire row.
*/
public function setData($key, $value=null)
{
$connectionName = $this->getConnectionName();
parent::setData($key, $value);
$this->setConnectionName($connectionName);
return $this;
}
关于php - Magento 为媒体使用第二个数据库 - SQLSTATE [42S02] : Base table or view not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305623/