Opencarts $ this-> model_catalog_product-> getProducts()返回错误/不存在的date_modified

时间:2015-07-17 18:30:33

标签: php mysql datetime foreach opencart

我正在为Opencart制作一个Atom接收器,它似乎在一个1.5.6x版本的存储库中运行良好。但是,当我将其迁移到实时商店(和开发人员)时,_productdate_modified列始终会返回getProduct()结果数组,每个结果数组都包含2015-01-15 10:45:182014-12-01 12:52:23 $result['date_modified']在产品行......以一种看似随机的方式。

我尝试过的一些事情:

  • 检查getProduct()功能,确保其提取正确的date_modified
  • 选中以确保date_modified实际上是DATETIME列,而不是返回字符串。
  • 我已经清理了流氓/游牧民族行的数据库,并检查/修复了任何崩溃。
  • 我尝试在不使用date_modified
  • 等任何格式的情况下返回date(DATE_ATOM, $time)
  • 我已关闭所有影响getProducts()功能的其他mod。股票和实时getProducts()之间的代码没有区别。
  • 我已经在OC之外重建了数据库连接,并且在没有任何date_modified表的情况下成功地将LEFT JOIN拉入模式。
  • 我已在manufacturer表中找到这些日期,但似乎没有任何损坏的数据,该列设置为DATETIMEJOIN正常运行
  • 我已经把大部分头发拉了两天,搜索一个列或这个查询如何在不触发任何错误的情况下如此破坏。

1 个答案:

答案 0 :(得分:0)

编辑:发布后我注意到实时商店在制造商表(和其他人)上有一个date_modified。此外,OC存储文字撇号,这些撇号会破坏一些查询以及这些实体的JSON。

制造商表上的额外date_modified显然来自一个名为" OpenShop"的修改过的OC安装。我们没有意识到在安装过程中有一个包含的.sql脚本。因此,使用JOIN的查询会提取制造商date_modified而不是产品。

解决方案是在p.date_modified,SELECT(或任何其他getProduct()查询中的getProducts()语句之后添加JOIN,以便明确提取正确修改)。另一个解决方案是删除那些第三方date_modified列,但它们有点方便。

此外,请注意制造商,选项等名称中的撇号。我们现在最终删除它们,并将在稍后编写更好的存储过程。