我有一个 CakePHP 模型 - 用户 - 与外部公司系统有联系。我在这些系统上存储一些数据,在本地存储其他数据。在我的User::beforeSave()
方法,我尝试设置一个 ID,将数据(使用该自定义 ID)发送到我的公司系统,然后,如果它在那里成功插入,则返回 true,以便 Cake 将插入具有相同 ID 的新用户记录,以便我稍后可以链接它们。
我找不到办法让这件事发生。有没有办法insert具有用户指定主键值的 CakePHP 记录?我正在使用 UUID,因此(实际上)没有重叠的机会。
$this->data['User']['id'] = String::uuid()
try {
$user_proxy = new CoreServicesUserProxy();
$corp_user = $user_proxy->CreateUser (
array (
'user' => array (
'UserName' => 'myusername',
'EmailAddress' => $this->data['User']['email'],
'SecurityId' => $this->data['User']['id']
)
)
);
}
catch ( Exception $e ) {
// error handling stuff
return false;
}
我知道您已经得到了一些提示,但这里有一些代码可能会有所帮助。
为什么不添加一个external_user_id
字段到你的users
table?
<?php
class User extends AppModel {
function beforeSave() {
$ds = ConnectionManager::getDataSource('core_services');
$externalUser = $ds->createUser($this->data);
if (!$externalUser) {
return false;
}
$this->data['User']['external_id'] = $externalUser['id'];
return true;
}
function afterFind($results, $primary) {
// handle different types of find here ('all' vs 'first' vs through relation)
foreach ($results as &$result) {
$result = $this->_mergeExternalUser($result);
}
}
function _mergeExternalUser($user) {
$ds = ConnectionManager::getDataSource('core_services');
$externalUser = $ds->retrieveUser($result['external_id']);
return am($externalUser, $user);
}
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)