我开发自定义的迁移代码:数据迁移到CiviCRM - 使用CiviCRM的PHP API调用一样保持原有标识
<?php
$result = civicrm_api3('Contact', 'create', array(
'sequential' => 1,
'contact_type' => "Household",
'nick_name' => "boo",
'first_name' => "moo",
));
有必要保持原来的ID,但指定“身份证”或“CONTACT_ID”上面没有工作。它要么不创建联系人,要么更新现有联系人。 当然,ID是自动递增的,但MySQL支持在这种情况下插入任意唯一值。
你将如何进行? Hack CiviCRM以某种方式将ID传递给INSERT语句中的MySQL?以某种方式在导入后转储SQL并在.sql文本文件中就地操作ID(很难保持完整性)?对此有何建议?
我至少有300.000个条目可以处理,所以一个完全自动化和可靠的解决方案是必须的。任何SQL魔术都可能做到这一点?
对于那些谁不熟悉CiviCRM,表结构如下:
mysql> desc civicrm_contact;
+--------------------------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------------+------------------+------+-----+-------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| contact_type | varchar(64) | YES | MUL | NULL | |
| contact_sub_type | varchar(255) | YES | MUL | NULL | |
| do_not_email | tinyint(4) | YES | | 0 | |
| do_not_phone | tinyint(4) | YES | | 0 | |
| do_not_mail | tinyint(4) | YES | | 0 | |
| do_not_sms | tinyint(4) | YES | | 0 | |
| do_not_trade | tinyint(4) | YES | | 0 | |
| is_opt_out | tinyint(4) | NO | | 0 | |
| legal_identifier | varchar(32) | YES | | NULL | |
| external_identifier | varchar(64) | YES | UNI | NULL | |
和我们谈论的第一个字段。
请注意,对于未来的问题,CiviCRM有它自己的stackexchange子站点 - http://civicrm.stackexchange.com/ – samuelsov