Vista de varios modelos de CakePHP
entity-relationship model-driven (3)
Estoy creando un sitio web en CakePHP y estoy algo nuevo en él. No pude encontrar buenos recursos en este asunto, así que ahí tienes:
Tengo una estructura de tres tablas para registrar usuarios: Users
, Addresses
y Contacts
. Tengo que crear 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 lidiar con esta situación? Especialmente para ahorrar . Creando un nuevo Modelo para representar esto, que tendrá un método save()
sí mismo (Tal vez una vista sql en la base de datos) Crea un Controlador para manejar esta Vista que bind
o unbind
la información
Me pregunto cómo manejaré ambos contactos, ya que serán 2 INSERT
diferentes.
Cualquier sugerencia o recursos de los que pueda excavar me alegraré.
3 modelos: Usuario, Dirección, Contacto
User hasOne Address, Contact
Address belongsTo User
Contact belongsTo User
en su modelo, usted define esto así:
class User extends AppModel {
var $name = ''User'';
var $hasOne = array(''Address'',''Contact'');
..
Para hacer esta vista, necesita las direcciones ind del campo user_id y las tablas de contactos
Para usar esto en una vista, simplemente llame a un hallazgo en el modelo de Usuario con un recursivo de uno (y, por cierto, el controlador de usuario solo usa el modelo de Usuario).
$this->User->recursive = 1;
$this->set(''user'', $this->User->find(''first'', array(''conditions''=>array(''id''=>666)));
Esto dará como resultado esta matriz para su vista:
array(
''Use'' => array(
''id'' => 666,
''name'' => ''Alexander''
),
''Address'' => array(
''id'' => 123,
''zip'' => 555
),
''Contact'' => array(
''id'' => 432,
''phone'' => ''555-1515''
));
CakePHP le permite mantener fácilmente el enlace entre sus modelos usando una relación, vea http://book.cakephp.org/view/78/Associations-Linking-Models-Together para obtener todos los detalles. Luego de recuperar al Usuario correcto, también obtendrá "de forma gratuita" su dirección e información de contacto.
Si usa el último código 1.2, consulte Model :: saveAll en la API
p.ej. Tu vista puede verse más o menos así:
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 método de agregar controlador de usuarios, tendrías algo así 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