0

こんばんは!私は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と一致することを確認するために、検証を追加する必要があります。問題はありませんが、これを行うにはもっと良い方法があるようです。

4

1 に答える 1