我有一个CakePHP模型 - 用户 - 与外部企业系统有联系。我在本地存储了一些数据和其他数据。在我的User::beforeSave()
方法中,我正在尝试设置ID,将数据(带有该自定义ID)发送到我的公司系统,然后,如果它在那里成功插入,则返回true,以便Cake将插入新用户记录具有相同的ID,以便我以后可以链接它们。
我无法找到实现这一目标的方法。有没有办法插入带有用户指定的主键值的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;
}
答案 0 :(得分:1)
我意识到你已经获得了一些提示,但这里有一些可能有用的代码。
为什么不在external_user_id
表中添加users
字段?
<?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);
}
}
?>
答案 1 :(得分:1)
有一种方法 - 但通常你会在Users表中添加另一列,让CakePHP用主键做。请参阅此Bakery article以了解它是如何完成的。由于一年多以后,这主要是供参考。据我了解,这也适用于CakePHP 1.2。