首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据迁移到CiviCRM -保留遗留ID

数据迁移到CiviCRM -保留遗留ID
EN

Stack Overflow用户
提问于 2016-07-15 15:13:54
回答 1查看 52关注 0票数 2

我使用CiviCRM的PHP调用开发自定义迁移代码,如下所示:

代码语言:javascript
复制
<?php
$result = civicrm_api3('Contact', 'create', array(
  'sequential' => 1,
  'contact_type' => "Household",
  'nick_name' => "boo",
  'first_name' => "moo",
));

需要保留原始id,但在上面指定'id‘或'contact_id’是行不通的。它要么不创建联系人,要么更新现有联系人。当然,ID是自动递增的,但是MySQL支持在这种情况下插入任意的唯一值。

你会怎么做?在INSERT语句中以某种方式将id传递给CiviCRM?在导入之后以某种方式转储SQL,并在.sql文本文件中对ID进行就地操作(很难保持完整性)?有什么建议吗?

我至少有300.000条条目要处理,所以一个完全自动化和健壮的解决方案是必须的。有任何SQL魔力可以做到吗?

对于那些不熟悉CiviCRM的人,表结构如下:

代码语言:javascript
复制
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              |                             |

我们讨论第一个领域。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 13:40:58

您应该使用external_identifier字段,这正是您想要的结果。

CiviCRM本身不使用这个字段,因此不存在扰乱核心功能的风险。这是为了链接到外部系统(例如,遗留系统)。

CiviCRM认为external_identifier是唯一的,所以如果您尝试使用同一个external_identifier插入联系人,它会抛出一个错误(使用API -我认为)或更新(使用CiviCRM联系人导入屏幕)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38399603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档