문제

저는 케이크를 처음 접하는데 어떻게 새 사용자를 생성하고 연락처 정보도 생성할 수 있는지 궁금합니다.

데이터베이스가 그렇죠

사용자

  • user_id
  • contact_detail_id
  • 비밀번호
  • 역할_ID
  • 사용자 이름

연락처_상세정보

  • contact_detail_id
  • 주소 1
  • 주소 2

그리고 다른 많은 분야

사용자 모델에서는 public $hasOne = array('ContactDetail');

사용자는 하나의 연락처 세부정보를 갖게 되므로

이제 내가 알아야 할 것은 이것이 작동하지 않는 것 같지만 saveassociated를 사용한다고 많은 사람들이 말했듯이 이것이 add 메소드에 어떻게 저장될 것인가입니다.

추가 보기는 이와 같고 내 이해로는 이것이 정확합니다.

<?php echo $this->Form->create('User', array('action' => 'add')); ?>
    <fieldset>
        <legend><?php echo __('Add User'); ?></legend>
    <?php
        echo $this->Form->input('User.username');
                echo $this->Form->input('User.password');
                echo $this->Form->input('roles');

                echo $this->Form->input('ContactDetail.name');
                echo $this->Form->input('ContactDetail.surname');
                echo $this->Form->input('ContactDetail.address1');
                echo $this->Form->input('ContactDetail.address2');
                echo $this->Form->input('ContactDetail.country');
                echo $this->Form->input('ContactDetail.email');
                echo $this->Form->input('ContactDetail.fax');


          ?>      
                <label>Are you interested in buying property in Malta?</label>
          <?php  
                $interest_buy = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_buy_property',array('type'=>'radio','options'=>$interest_buy,'value'=>'0','legend'=>FALSE));
          ?>      
                <label>Are you interested in renting property in Malta?</label>
          <?php  
                $interest_rent = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_rent_property',array('type'=>'radio','options'=>$interest_rent,'value'=>'0','legend'=>FALSE));
                echo $this->Form->input('ContactDetail.mobile');
                echo $this->Form->input('ContactDetail.phone');
                echo $this->Form->input('ContactDetail.postcode');
                echo $this->Form->input('ContactDetail.town');

                echo $this->Form->input('ContactDetail.newsletter',array('type'=>'checkbox','label'=>'Would you like to register for the newsletter?' ,'checked'=>'1','legend'=>FALSE,));
         ?>       

    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
도움이 되었습니까?

해결책

먼저 모델에 무엇을 넣을지에 대한 Arun 설명을 참조한 다음 사용할 수 있습니다. $this->User->saveAll();또는 $this->User->saveAssociated(); 두 테이블을 동시에 저장합니다.

ContactDetail을 먼저 저장한 후 User를 저장하려는 경우 두 번째 옵션을 수행할 수 있지만 권장되지 않습니다.

 $this->User->ContactDetail->create(); 
 $this->User->ContactDetail->save($this->request->data);`
 this->request->data['User']['contact_detail_id'] = $this->User->ContactDetail->id`;
 $this->User->Create();
 $this->User->save($this->request->data);`

하지만 저는 첫 번째 옵션을 다시 시도하는 것보다 첫 번째 옵션을 선호합니다.

메모:User Model에서 이와 같이 ContactDetail 및 User 관계가 모델에 있는지 확인하십시오.

public $hasOne= array(
    'ContactDetail'   => array(
        'className' => 'ContactDetail',         
        'foreignKey' => 'contact_detail_id'
    )
);

도움이 되길 바랍니다.

다른 팁

데이터베이스를 첫 번째 살펴보고 다음 데이터베이스 구조를 사용해야합니다. 이것은 더 방향으로 당신을 도울 것입니다 :

User Model

id
username
password
role_id
.

ContactDetail Model

id
user_id
address1
address2
.

hasMany 모델에서 User 모델의 ContactDetail 모델 관계를 정의합니다.

$hasMany => array('ContactDetail');
.

이제 다음을 사용하여 (id => address1) 쌍으로 연락처 세부 내용을 입력합니다.

$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
                                         'fields' => array('ContactDetail.id', 'ContactDetail.address1')));
.

이제 관련 세부 정보를 저장하려면 SaveAssociated 메서드 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top