2008-09-21 20 views
5

Estoy creando un sitio web en CakePHP y estoy algo nuevo en él. No pude encontrar buenos recursos en este asunto, así que vaya:Vista de modelo múltiple de CakePHP

Tengo una estructura de tres tablas para registrar usuarios: Users, Addresses y Contacts. Tengo que construir una vista con información de las tres tablas como:

 
Full Name:   [   ] (from Users) 
Shipping Address: [   ] (from Address) 
Mobile Phone:  [   ] (from Contact) 
e-Mail Address: [   ] (from Contact) 

¿Cuál es la mejor manera de hacer frente a esta situación. Especialmente para guardar. La creación de un nuevo modelo para representar a este, que tendrá un método save() sí mismo (Tal vez una vista de SQL en la base de datos) Crear un controlador para hacer frente a este Ver que bind s o unbind s info

me preguntan todavía cómo voy a manejar ambos contactos, ya que serán 2 diferentes INSERT 's

Cualquier pista o recursos que pueda excavar me alegraré.

Respuesta

10

Si su uso de la última versión del código 1.2, echa un vistazo Modelo :: saveAll en la API

por ejemplo. Tu punto de vista puede ser algo como esto:

echo $form->create('User', array('action' => 'add'); 
echo $form->input('User.name'); 
echo $form->input('Address.line_1'); 
echo $form->input('Contact.tel'); 
echo $form->end('Save'); 

Luego, en el complemento Usuarios método de control que tendría algo como:

... 

if($this->User->saveAll($this->data)) { 
$this->Session->setFlash('Save Successful'); 
$this->redirect(array('action' => 'index')); 
} else { 
$this->Session->setFlash('Please review the form for errors'); 
} 

... 

En su modelo de usuario necesitará algo como:

var $hasOne = array('Address', 'Contact'); 

Espero que ayude!

http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1

4

CakePHP le permite mantener fácilmente el enlace entre sus modelos usando la relación, vea http://book.cakephp.org/view/78/Associations-Linking-Models-Together para los detalles completos. Luego de recuperar al Usuario correcto, también obtendrá "de forma gratuita" su dirección e información de contacto.

+0

Hola.Cambié mi pregunta para reflejar mi intención, cómo guardar, cómo creo el Controlador de registro y vista (s) –

+0

CakePHP se administra a sí mismo guardando objetos compuestos. Significa que si carga un Usuario y cambia su contacto, cuando llama al mothed "save" implícito desde CakePHP en el objeto User, también se actualizará el objeto Contact. – gizmo

1

3 modelos: el usuario, dirección, contacto

User hasOne Address, Contact 
Address belongsTo User 
Contact belongsTo User 

en su modelo que definen esta así:

class User extends AppModel { 
var $name = 'User'; 
var $hasOne = array('Address','Contact'); 
.. 

Para hacer esta vista, necesita user_id campo ind direcciones y contactos mesas

Para utilizar este en una vista, sólo tiene que llamar un hallazgo en el modelo de usuario con un recursiva de una (y por cierto, el controlador usuarios sólo utiliza el modelo de usuario).

$this->User->recursive = 1; 
$this->set('user', $this->User->find('first', array('conditions'=>array('id'=>666))); 

Esto dará lugar a esta matriz para la vista:

array(
    'Use' => array(
    'id' => 666, 
    'name' => 'Alexander' 
), 
    'Address' => array(
    'id' => 123, 
    'zip' => 555 
), 
    'Contact' => array(
    'id' => 432, 
    'phone' => '555-1515' 
)); 
Cuestiones relacionadas