【发布时间】:2016-07-15 15:13:54
【问题描述】:
我使用 CiviCRM 的 PHP API 调用开发自定义迁移代码,例如:
<?php
$result = civicrm_api3('Contact', 'create', array(
'sequential' => 1,
'contact_type' => "Household",
'nick_name' => "boo",
'first_name' => "moo",
));
需要保留原始 ID,但在上面指定 'id' 或 'contact_id' 不起作用。它要么不创建联系人,要么更新现有联系人。 ID 是自动递增的,当然,但 MySQL 支持在这种情况下插入任意的唯一值。
您将如何进行?破解 CiviCRM 在 INSERT 语句中以某种方式将 id 传递给 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 子站点 - civicrm.stackexchange.com