Многомодельное представление CakePHP
-
02-07-2019 - |
Вопрос
Я создаю веб-сайт на CakePHP и новичок в этом.Я не смог найти хороших ресурсов по этому вопросу, так что поехали:
У меня есть структура из трех таблиц для регистрации пользователей: Users
, Addresses
и Contacts
.Мне нужно создать представление с информацией обо всех трех таблицах, например:
Full Name: [ ] (from Users) Shipping Address: [ ] (from Address) Mobile Phone: [ ] (from Contact) e-Mail Address: [ ] (from Contact)
Как лучше всего поступить в этой ситуации. Специально для экономии.Создание новой модели для представления этого, которая будет иметь save()
сам метод (возможно, представление sql в базе данных). Создайте контроллер для работы с этим представлением, которое bind
или unbind
информация
Мне все еще интересно, как я буду обращаться с обоими контактами, ведь они будут двумя разными INSERT
's
Я буду рад любому намеку или ресурсам, которые я смогу найти.
Решение
Если вы используете последнюю версию кода 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');
Затем в методе добавления вашего контроллера пользователей у вас будет что-то вроде:
...
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
Другие советы
CakePHP позволяет вам легко поддерживать связь между вашими моделями с помощью отношений, см. http://book.cakephp.org/view/78/Associations-Linking-Models-Together для полной детализации.Тогда, найдя нужного Пользователя, вы также получите «бесплатно» его адрес и контактную информацию.
3 модели:Пользователь, адрес, контакт
User hasOne Address, Contact
Address belongsTo User
Contact belongsTo User
в вашей модели вы определяете это следующим образом:
class User extends AppModel {
var $name = 'User';
var $hasOne = array('Address','Contact');
..
Чтобы сделать это представление, вам нужно ID пользователя поле Индикация адреса, и контакты столы
Чтобы использовать это в представлении, вы просто вызываете поиск по модели 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'
));