instalacion example ejemplos cake php cakephp cakephp-3.0

example - instalacion cakephp 3



Cake PhP 3 Guardar datos asociados en niveles mĂșltiples (1)

Hola, logré solucionar este problema.

Primero la función de guardar debería ir así:

$user = $users->newEntity($data, [ ''associated'' => [''Customers'',''Customers.Contactinfos'',''Customers.Contactinfos.Phones'',''Customers.Contactinfos.Emails''] ]); $users->save($user);

En segundo lugar, la solicitud debe respetar todos los niveles como este:

Array ( [customers] => Array ( [Customer] => Array ( [name] => test2 [last_name] => test2 [contactinfos] => Array ( [Contactinfo] => Array ( [emails] => Array ( [Email] => Array ( [address] => [email protected] ) ) [phones] => Array ( [Phone] => Array ( [number] => test2 ) ) ) ) [ssn] => test2 [address] => test2 [gender] => male [birth] => Array ( [year] => 2015 [month] => 05 [day] => 20 ) ) ) [password] => test2 [role_id] => 0 [activation_code] => 91c40a9979fcc564a5f27ff09317d6e2f4fdcd58 [tokentime] => 1432154711 [status] => [email] => [email protected] )

Y mi ctp se ve así:

<fieldset> <legend><?= __(''Add User'') ?></legend> <?php echo $this->Form->input(''customers.Customer.name''); echo $this->Form->input(''customers.Customer.last_name''); echo $this->Form->input(''customers.Customer.contactinfos.Contactinfo.emails.Email.address'', array(''label'' => ''Email'')); echo $this->Form->input(''password''); echo $this->Form->input(''customers.Customer.contactinfos.Contactinfo.phones.Phone.number'', array(''label'' => ''Phone'')); echo $this->Form->input(''customers.Customer.ssn'', array(''label'' => ''Cedula'')); echo $this->Form->input(''customers.Customer.address''); echo $this->Form->input(''customers.Customer.gender'', array( ''options'' => array(''male'' => ''Male'',''female'' => ''Female'') )); echo $this->Form->input(''customers.Customer.birth''); echo $this->Form->input(''role_id'', [''options'' => $roles]); ?> </fieldset>

Tengo un modelo de datos donde registro un usuario-> cliente-> contactinfo-> email / phone

Cada una de estas son tablas diferentes con los respectivos controladores y todo lo relacionado.

Cuando intento salvar a un usuario, utilizo el siguiente código:

$users = TableRegistry::get(''Users''); $user = $users->newEntity($data, [ ''associated'' => [''Customers''],[''Contactinfos''],[''Phones''],[''Emails''] ]); $users->save($user);

Pero solo salva al usuario y al cliente.

Este es el dato de solicitud:

Array ( [customers] => Array ( [Customer] => Array ( [name] => stackovertest [last_name] => stackovertest [ssn] => stackovertest [address] => stackovertest [gender] => male [birth] => Array ( [year] => 2015 [month] => 05 [day] => 20 ) ) ) [emails] => Array ( [Email] => Array ( [email] => [email protected] ) ) [password] => stackovertest [phones] => Array ( [Phone] => Array ( [number] => stackovertest ) ) [role_id] => 0 [activation_code] => a026698222d0479252c2712d3d696fbcca8a766d [tokentime] => 1432141608 [status] => [email] => [email protected] [contactinfos] => Array ( [contactinfo] => Array ( ) ) )

Básicamente, la tabla contactinfo tendrá una identificación (autoincrementada en la base de datos) y la identificación del cliente. Y cada correo electrónico y teléfono registrado tendrá la identificación de la información de contacto.

Esta es la información de la matriz $ user:

App/Model/Entity/User Object ( [new] => 1 [accessible] => Array ( [email] => 1 [password] => 1 [status] => 1 [activation_code] => 1 [tokentime] => 1 [role_id] => 1 [role] => 1 [customers] => 1 ) [properties] => Array ( [customers] => Array ( [0] => App/Model/Entity/Customer Object ( [new] => 1 [accessible] => Array ( [name] => 1 [last_name] => 1 [ssn] => 1 [gender] => 1 [birth] => 1 [address] => 1 [user_id] => 1 [user] => 1 [aoffers] => 1 [hoffers] => 1 [poffers] => 1 ) [properties] => Array ( [name] => stackovertest [last_name] => stackovertest [ssn] => stackovertest [address] => stackovertest [gender] => male [birth] => Cake/I18n/Time Object ( [time] => 2015-05-20T00:00:00+0000 [timezone] => UTC [fixedNowTime] => ) ) [dirty] => Array ( [name] => 1 [last_name] => 1 [ssn] => 1 [address] => 1 [gender] => 1 [birth] => 1 ) [original] => Array ( ) [virtual] => Array ( ) [errors] => Array ( ) [repository] => Customers ) ) [password] => stackovertest [role_id] => 0 [activation_code] => a026698222d0479252c2712d3d696fbcca8a766d [tokentime] => 1432141608 [status] => [email] => [email protected] ) [dirty] => Array ( [customers] => 1 [password] => 1 [role_id] => 1 [activation_code] => 1 [tokentime] => 1 [status] => 1 [email] => 1 ) [original] => Array ( ) [virtual] => Array ( ) [errors] => Array ( ) [repository] => Users )

Puede ver que no incluye el objeto contactinfo por lo que no lo guardará.

¿Cómo puedo arreglar esto? ¿O hay una forma diferente de guardar múltiples niveles de datos asociados?