2008-09-21 2 views
5

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

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

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

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

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

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

ответ

10

Если вы используете последнюю версию 1.2 код, проверить Model :: SaveAll в апи

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

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

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

+0

Привет.Я изменил свой вопрос, чтобы отразить мое намерение, как сохранить, как я создаю контроллер регистрации и представления (ов) – 2008-09-21 13:09:22

1

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 field ind адрес и контакты столы

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

$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' 
)); 
Смежные вопросы