您可以在创建用户时创建配置文件,只需执行
//your code for user saving
if($this->User->save())
$this->User->Profile->save(array('user_id'=>$this->User->id))
或者那个和tada的变体,空白配置文件被保存。
事实上,如果你确定你总是想为最近创建的用户添加配置文件,你可以在User 模型的afterSave中完成。
class User extends AppModel {
public function afterSave($created) {
//make sure to do it on creation and not on update
if ($created) {
$this->Profile->save(array('user_id'=>$this->getLastInsertID());
}
}
}
但请记住,如果您在 Profile 模型中设置了验证,这将触发它们。假设您在个人资料中有一个“工作”列,要求不能为空,那么就会出现一些错误。on
您可以通过在验证过程中添加选项来绕过它
class Profile extends AppModel {
public $validate = array(
'job' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'You have to have a job',
'allowEmpty' => false,
'required' => true,
'on' => 'update'
)
),
/* etc */
}
其他选择是简单地......不要那样做:)如果您不希望用户疯狂地添加配置文件,您可以将其用户 ID“硬编码”到配置文件中。例如,假设您在配置文件控制器中有一个添加操作
class ProfilesController extends AppController {
public function add($user_id) {
//lets assume you have the user id somewhere, maybe even get the logged session one
if($this->request->is('post')) {
//when you are saving, force the add (or edit) to be for the user_id, not anyone
$this->request->data['Profile']['user_id'] = $user_id;
$this->Profile->save();
}
}
在这里和那里有一些 ifs,没有必要在创建用户之后创建空白配置文件。不过也不痛...
如果您确定要在所有用户创建案例中添加空白配置文件,我个人喜欢 afterSave 选项。控制器中的代码更少,但您必须更加小心您的配置文件验证。
哦,关于配置文件中的“相同的 id 和 user_id”……不要那样做。没必要,真的。通过简单的查找,您可以毫无问题地获得用户及其个人资料,让 cake 处理外键。