Doctrine TimeStamp 错误:导入 SQL Server 2008 表
网络代理 » 数字新闻 » Doctrine TimeStamp 错误:导入 SQL Server 2008 表

Doctrine TimeStamp 错误:导入 SQL Server 2008 表

如何导入带有字段的 SQL Server 表 时间戳 与学说? 当这里和那里的教程不够时,通常只有一种方法可以达到您的目的...... 弄脏你的手! 今天我提出了一个解决方案,我希望它能被负责 Doctrine 开发的社区快速整合,它允许从包含类型字段的 SQL Server 数据库创建 Symfony2 实体 时间戳.

什么是时间戳类型?

我似乎有必要指定一些关于 Timestamp 类型的小信息。 我不是 MySQL 专家,但从我接触到的信息来看,MySQL Timestamp 看起来像一个日期,这样更容易转换。 但是,相同类型对于SQL Server 的理解要微妙一些。 Microsoft Technet 上提供了该文档。

一种在数据库中公开自动生成的单字符二进制数的数据类型。
有趣……我如何告诉 Doctrine 不要改变我的信仰? 我提出一个解决方案来转移问题......

寻找“定制”解决方案

我已经可以看到消息告诉我已经有一个现成的方法可以工作。 是的! 而且,正是这个 Symfony2 任务可以这样调用:

php 应用程序/控制台学说:映射:导入
这个任务工作正常,但正如我在这里读到的,Doctrine 适用于数据库上大约 70-80% 的可能映射。 就我而言,我想导出 SQL Server (2008) 表的映射,其中包含一个著名的 TimeStamp 字段。 而在剩下的20%的映射中,恰恰有这几类字段。

我将运行命令并尝试导入 mappaqe。

1
php app/console doctrine:mapping:import —force NamespaceNameBundle xml

就我而言,我不得不使用两个额外的选项,即:

  1. –em=“……” 指定实体管理器 负责我的 SQL Server 数据库;
  2. --filter=”表”。 我想使用这个与 MariaDB 一起使用的选项,但在与 MSSQL 一起使用时似乎被忽略了。 这允许您指定要导出的表。 在我的例子中,我复制了我的 BDD,我删除了我不感兴趣的表并创建了一个新的配置文件实体管理器.
    这是引发的异常:
1
2
[DoctrineDBALDBALException]
未知数据库 类型 请求时间戳,DoctrineDBALPlatformsSQLServer2008Platform 可能不支持。

从现在开始,我们将不得不操纵骰子。
不支持 Timestamp 类型——我承认我真的不知道将它与什么类型的 PHP 字段相关联——我们会暂时告诉 Doctrine 这种类型必须被转换 日期时间.

  • 转到树结构指示的文件夹, vendordoctrinedbalibDoctrineDBAL平台.
  • 此文件夹中包含支持大多数现有 DBMS 的类。
  • 在我的例子中,我正在使用 SQL Server 2008 R2,所以我编辑了文件 SQLServer2008Platform.php,但如果它与您的配置匹配,请随意编辑另一个文件。
  • 我们将编辑方法 initializeDoctrineTypeMappings. 在变量中 原则类型映射 存在转换类型的信息。 添加行:
    $this->doctrineTypeMapping['timestamp'] = 'datetime';
  • 重新启动映射导入。 所有字段的映射都已导入。
  • 您必须记住删除您添加到文件中的行。 如果您不确定,请删除所有供应商并重新安装它们。
  • 现在依次转到已生成的文件。 指示了每个路径,然后依次遵循以下指示。
    • 您现在拥有了 XML 中的表的等价物。
    • 删除对应于 TimeStamp 类型字段的行。 这样,Doctrine 将忽略这些字段。
    • SQL Server 的一个小预防措施是在包含一个或多个空格的“列”中的每个值周围添加方括号。
      对于这条线,

      SQL Server 列是“我的信息”。 Doctrine 不知道如何使用 MSSQL 处理空格。 所以你需要像这样添加钩子:
  • 更正您的文件后,我们将启动实体生成。
    1
    php app/console doctrine:mapping:convert 注释./src

您可能需要指定要使用的实体管理器,如下所示: –em=“……”.

  • 您现在可以删除映射,即资源中存在的 .xml 文件。
    就是这样,你现在有了 Doctrine 生成的有效实体。 只要负责 Doctrine 开发的团队没有集成一个可行的解决方案,允许 TimeStamp 类型在 PHP 中得到本地支持,这个解决方案就有点……“brian fuck”是有效的。

祝你好运,很快见到你!

★★★★★