Сохранение строк пользователя и сведений с помощью Cake 2.4.5

StackOverflow https://stackoverflow.com//questions/22001001

Вопрос

Я новичок в торте, и мне было интересно, как я смогу создать нового пользователя, а также создать контактные данные.

база данных такая

Пользователи

  • ID пользователя
  • contact_detail_id
  • пароль
  • идентификатор_роли
  • имя пользователя

Контактная информация

  • contact_detail_id
  • адрес 1
  • Адрес 2

и многие другие области

В модели пользователя я назначил public $hasOne = array('ContactDetail');

Поскольку у пользователя будет одна контактная информация

Теперь мне нужно знать, как это будет сохранено в методе добавления, как многие говорили, используя saveassociated, хотя это, похоже, не работает.

Представление добавления выглядит так, и, насколько я понимаю, это правильно.

<?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')); ?>
Это было полезно?

Решение

Пожалуйста, ознакомьтесь с объяснением Аруна о том, что сначала нужно добавить в вашу модель, а затем вы можете использовать $this->User->saveAll();или $this->User->saveAssociated(); чтобы сохранить обе таблицы одновременно.

Если вы хотите сначала сохранить ContactDetail, а затем сохранить пользователя, вы можете использовать второй вариант, но это не рекомендуется.

 $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);`

Но я предпочитаю первый вариант, попробовать еще раз первый вариант,

Примечание:Убедитесь, что отношения ContactDetail и User присутствуют в модели, как показано в User Model.

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 в модели генеракодицетагкода с генеракодицетагкодом, как:

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

Теперь заполните массив контактных данных с парой User, используя:

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

Теперь, чтобы сохранить соответствующие детали, используйте Saveassocied метод .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top