如何解决Doctrine2和MySQL分区
| 是否有人有将分区功能与Doctrine2库结合使用的经验? 第一个问题是Doctrine为关联列创建外键,有人知道如何防止或禁用它吗? 第二个问题是如何指定自定义表定义(PARTITION BY ...)? 提前致谢!解决方法
您还不走运!
首先,从所有正在管理的表D2中删除所有外键。
复制并执行此查询的结果:
SET SESSION group_concat_max_len=8192; -- // increase this if you do not see the full list of your tables
SELECT IFNULL(REPLACE(GROUP_CONCAT(\'ALTER TABLE \',TABLE_NAME,\' DROP FOREIGN KEY \',CONSTRAINT_NAME,\'; \'),\',\'\'),\'\') FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE=\'FOREIGN KEY\';
然后在/vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
(或此类所在的位置)中覆盖supportsForeignKeyConstraints()
方法以:
public function supportsForeignKeyConstraints()
{
return false;
}
这将阻止Doctrine在您的下一个“ 4”命令上创建外键约束。之后,您可以在需要的地方简单地执行ALTER TABLE PARTITION BY...
语句(D2不支持架构级别的分区)。我建议您首先备份并截断表(使用--no-create-info
),以便尽快执行结构更改,然后将其还原。
就像这个人在这里所说的那样,根据我的个人经验,只要有正确的关系定义,D2不会在乎您是否有FK。
附注:我目前正在扩展注释语法,以支持正确的表和列定义,包括ENGINE
(这可能很有用),PARTITION BY
和@Columnoptions
数组(即{\"fixed\"=true,\"unsigned\"=true,\"default\"=0}
)。
对于反向工程和代码补丁,整个工作耗费了不眠之夜,希望您能更快地完成:)
,MySQL中的PARTITION引擎在键方面有主要限制。请查看最新的文档,当前在这里:http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html
如果Doctrine要求分区不支持的键,那么您很不走运。分区引擎在设计上非常受限制-它旨在用于不经常读取的档案存储。除非您进行更改,否则很少有可识别MySQL的应用程序可与分区一起使用。
我建议按预期使用分区-存档。答案是将数据存储在更主流的MySQL数据引擎中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。