【问题标题】:Silverstripe 4, How to solve database table conflict that maps to same database tableSilverstripe 4,如何解决映射到同一个数据库表的数据库表冲突
【发布时间】:2019-08-05 21:05:35
【问题描述】:

所以我犯了一个错误,不小心定义了两个导致同一个数据库表的类

<?php

namespace Sca {
  use SilverStripe\ORM\DataObject;

  class Gallery extends DataObject {

      private static $table_name = 'Gallery';
      // ...
  }
}

还有其他类

<?php

namespace Sca {
  use SilverStripe\ORM\DataObject;

  class GalleryHolder extends DataObject {

      private static $table_name = 'Gallery';
      // ...
  }
}

然后我运行 /dev/build 并且站点崩溃了。现在我唯一看到的是 /var/log/apache/.. 下 apache 日志上的 apache 错误。

[2019-08-05 23:36:32] 错误日志。错误:未捕获的异常 LogicException:“多个类(“Sca\GalleryHolder”、“Sca\Gallery”) 映射到同一个表:“画廊””在 /var/www/demo/sc2/vendor/silverstripe/framework/src/ORM/DataObjectSchema.php 第 299 行 {"exception":"[object] (LogicException(code: 0): Multiple 类 (\"Sca\GalleryHolder\", \"Sca\Gallery\") 映射到相同的 表:“画廊”在 /var/www/demo/sc2/vendor/silverstripe/framework/src/ORM/DataObjectSchema.php:299)"} []

我转储了数据库并 $ grep'ed dirs 没有成功找到定义 GalleryHolder 的位置,该位置导致为该类创建 Gallery 表。没结果。我还删除了 GalleryHolder 的类文件并再次运行 /dev/build 但从 Web 访问时仍然会出现该错误和“服务器错误”屏幕。 有什么建议可以清除缓存或架构以解决冲突吗?

【问题讨论】:

    标签: silverstripe silverstripe-4


    【解决方案1】:

    所以我找到了一个快速解决方案。我去了 /var/www/demo/sc2/vendor/silverstripe/framework/src/ORM/DataObjectSchema.php:299
    并注释掉引发错误的行并添加新行以在存在冲突时修改表名。我重置更改了这些行

    if ($conflict) {
    //    throw new LogicException(
    //       "Multiple classes (\"{$class}\", \"{$conflict}\") map to the same table: \"{$table}\""
    //    );
          $table = $table . '_dupl';
    }
    

    然后我能够再次加载该页面,它自己重建了缓存,我取消了先前注释掉 /var/www/demo/sc2/vendor/silverstripe/framework/src/ORM/DataObjectSchema.php 中的行:299 .

    【讨论】:

    • 您也可以运行?flush 使缓存无效,或删除缓存目录。
    • 我很确定我尝试了所有方法,包括 ?flush,尽管我不是 100% 确定。
    • 您可以通过在您的项目文件夹中创建一个名为silverstripe-cache 的文件夹来“强制”新缓存,然后在您完成任何您需要做的事情后再次删除它。如果您必须快速解决问题,像这样修改核心文件很好,但绝对不推荐这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2010-10-07
    • 2011-07-13
    相关资源
    最近更新 更多