CakePHP мультимодельный вид - PullRequest
5 голосов
/ 21 сентября 2008

Я создаю сайт в CakePHP, и я немного новичок в этом. Я не мог найти хорошие ресурсы по этому вопросу, так что вы идете:

У меня есть три таблицы для регистрации пользователей: Users, Addresses и Contacts. Я должен построить представление с информацией обо всех трех таблицах, таких как:

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

Как лучше всего справиться с этой ситуацией. Специально для сохранения . Создание новой модели для представления этого, которая будет иметь сам метод save() (возможно, представление sql в базе данных). Создайте контроллер для работы с этим представлением, которое bind s или unbind s info

Интересно, как я буду обращаться с обоими контактами, так как они будут 2 разными INSERT

Любой намек или ресурсы, которые я могу найти, буду рад.

Ответы [ 3 ]

10 голосов
/ 22 сентября 2008

Если вы используете последний код 1.2, проверьте Model :: saveAll в API

например. Ваш взгляд может выглядеть примерно так:

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');

Тогда в вашем методе добавления контроллера Users у вас будет что-то вроде:

...

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');
}

...

В вашей пользовательской модели вам понадобится что-то вроде:

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

Надеюсь, это поможет!

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

4 голосов
/ 21 сентября 2008

CakePHP позволяет вам легко поддерживать связь между вашими моделями, используя отношения, см. http://book.cakephp.org/view/78/Associations-Linking-Models-Together для получения полной информации. Затем, получив нужного Пользователя, вы также получите «бесплатно», его адрес и контактную информацию.

1 голос
/ 25 сентября 2008

3 модели: пользователь, адрес, контакт

User hasOne Address, Contact
Address belongsTo User
Contact belongsTo User

в вашей модели вы определяете это так:

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

Для создания этого представления вам нужно user_id поле ind адреса и контакты таблицы

Чтобы использовать это в представлении, вы просто вызываете находку в модели User с рекурсивной единицей (и, между прочим, контроллер пользователя использует только модель User).

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

Это приведет к массиву для вашего просмотра:

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