2013-06-04 4 views
0

CakePHP 사용 2.3. 사용자 테이블과 프로필 테이블이있는 응용 프로그램을 만들고 있습니다. 연결은 다음과 같습니다. 사용자 hasOne 프로필/프로필 belongsTo 사용자.CakePHP hasOne belongsTo 관계, 동일한 동작 편집/추가

그러나 사용자 프로필에 액세스 할 수있는 권한을 부여하지 않아 프로필 복사본을 만들 수 있습니다. 사용자가 허용하는 하나의 프로필을 편집하는 단일 작업이 필요합니다.

user_id 및 id를 사용하여 프로필을 시작하는 방법이 있지만 사용자를 추가 할 때 다른 모든 필드가 비어 있습니까? 그렇게하면 사용자는 가입과 관련된 프로필을 자동으로 가지게되며 필요한 것은 빈 필드를 채우는 편집 작업뿐입니다.

또한 CakePHP에서 프로파일 테이블의 id와 user_id를 같은 숫자로 만들 수 있다면 훨씬 더 깨끗합니다. 사용자가 프로필 만 수정하도록 제한해야합니다.

지금은 코드가 없습니다.이 작업을 수행하는 전략에 대한 의견을 보내고 싶습니다. 감사합니다.

답변

1

당신은 단지

//your code for user saving 
if($this->User->save()) 
    $this->User->Profile->save(array('user_id'=>$this->User->id)) 

또는 그와 타다의 변형을, 사용자 생성에 대한 프로필을 만들 수 있습니다, 빈 프로파일 저장합니다.

사실 이 항상 인 경우 최근에 생성 된 사용자에게 프로필을 추가하려는 경우 사용자 모델의 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()); 
     } 
    } 
} 

프로필 모델에 유효성 검사를 설정하면 트리거됩니다. 프로필에 null 일 필요가없는 열 "작업"이 있다고 가정하면 일부 오류가 나타납니다. 당신은 당신이 할 수있는,

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 */ 
} 

다른 옵션은 단순히 ... 당신이 원하지 않는 경우 :)하는 사용자가 미친 듯이 프로필을 추가하려면 어떻게하지 않는 것입니다 검증 과정에서 on 옵션을 추가하여 그것을 무시할 수 "하드 코드"는 프로필의 사용자 ID입니다. 예를 들어, 당신이 프로필 컨트롤러 여기 저기 몇 IFS와

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(); 
     } 
    } 

에서 추가 조치가 있다고 가정하자, 바로 사용자 생성 후 빈 프로필을 만들 필요가 없습니다. 그러나 어느 쪽도 아프지 않습니다 ...

개인적으로 나는 모든 사용자 생성 사례에서 빈 프로필을 추가하려는 경우 afterSave 옵션을 좋아합니다. 컨트롤러의 코드가 적지 만 프로필 검증에 신중해야합니다.

아, 프로필에서 "id와 user_id"가 같지 않습니다. 정말로 필요는 없습니다. 간단한 찾기를 사용하면 문제없이 사용자와 프로필을 얻을 수 있으므로 케이크가 외부 키를 처리하도록하십시오.

+1

고맙습니다. 훌륭한 답변이며 정확히 내가 원했던 것입니다. – user2033570

+0

다행입니다. :) – Nunser