晚上好!我对 CakePHP 的魔力有点困惑。其中一些是惊人的,但有一个棘手的问题让我感到困惑。我有一个用户模型和一个关联的 UserBasicInfo 模型:
class User extends AppModel {
public $name = 'User';
public $hasOne = array(
'UserBasicInfo' => array(
'className' => 'UserBasicInfo',
'dependent' => true
)
);
class UserBasicInfo extends AppModel {
public $useTable = 'users_basic_info';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'id'
)
);
协会很好,它会自动加入等等。在进行插入时,如果它有记录,我将如何告诉 UserBasicInfo 模型它的 ID 是什么?它可能并不总是有记录,因为我不强迫用户添加此信息,而且我不喜欢添加充满空白数据的记录的想法。下面是我的 UserController 中的 edit_basic_information 方法:
public function edit_basic_information($id = null) {
$this->User->id = $this->Auth->user('id');
$test = $this->User->read();
echo '<pre>';
print_r($test);
echo '</pre>';
if (!$this->User->exists())
throw new NotFoundException(__('Invalid user'));
//if(empty($this->data))
// $this->data = $this->User->findById($this->User->id);
if ($this->request->is('post')) {
// $success = false;
$this->request->data['User']['id'] = $this->Auth->user('id');
// $duplicate = $this->User->find('first',
// array(
// 'conditions' =>
// array(
// 'UserBasicInfo.user_id' => $this->Auth->user('id')
// )
// )
// );
echo '<pre>';
print_r($this->request->data);
echo '</pre>';
// if($duplicate) {
// $success = $this->User->updateALL($this->request->data);
// } else {
$success = $this->User->saveALL($this->request->data, array('deep' => true));
// }
if ($success) {
$this->Session->setFlash(__('The info has been saved'));
} else {
$this->Session->setFlash(__('The info could not be saved. Please, try again.'));
}
}
$this->set('countries', $this->ChoicesCountries->find('list'));
}
正如你在上面看到的,我已经尝试了一些东西。凭借 Cake 所拥有的所有魔力,为重复检查执行额外的数据库调用之类的操作让我感觉自己做错了什么。此外, $this->data 在提交时会被覆盖 - 不过,这对于预先填充以前的答案很有用。虽然我也添加了一个隐藏的 id 字段,但我只需要添加验证,以确保 ID 与 Auth id 匹配。不是问题,但似乎确实有更好的方法来做到这一点。