Pregunta

Soy muy nuevo en esto y me preguntaba cómo podría crear un nuevo usuario y también crear los datos de contacto.

la base de datos es así

Usuarios

  • ID_usuario
  • contacto_detalle_id
  • contraseña
  • Identificación del rol
  • nombre de usuario

Detalles de contacto

  • contacto_detalle_id
  • Dirección 1
  • dirección 2

y muchos otros campos

En el modelo de Usuario he asignado public $hasOne = array('ContactDetail');

Dado que el usuario tendrá un detalle de contacto.

Ahora lo que necesito saber es cómo se guardaría esto en el método add, ya que muchos dijeron que se usara saveassociated, aunque esto no parece estar funcionando.

La vista de adición es así y, según tengo entendido, esto es correcto.

<?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')); ?>
¿Fue útil?

Solución

Consulte la explicación de Arun sobre qué poner en su modelo primero y luego puede usar $this->User->saveAll();o $this->User->saveAssociated(); para guardar ambas tablas al mismo tiempo.

Si desea guardar ContactDetail primero y luego guardar Usuario, puede hacer esta segunda opción, pero no se recomienda.

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

Pero prefiero la primera opción, volver a intentar la primera opción,

Nota:Asegúrese de que ContactDetail y la relación de usuario estén en un modelo como este en User Model

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

Espero eso ayude.

Otros consejos

En el primer vistazo a su base de datos, debe utilizar la siguiente estructura de base de datos, esto le ayudará en más direcciones:

User Model

id
username
password
role_id

ContactDetail Model

id
user_id
address1
address2

Definir hasMany relación modelo en el User Modelo con ContactDetail como:

$hasMany => array('ContactDetail');

Ahora complete una serie de detalles de contacto con (id => address1) emparejar usando:

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

Ahora para guardar los detalles asociados, use Guardar método asociado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top