CakePHP использовать 3 модели с SaveAll - PullRequest
1 голос
/ 05 августа 2010

У меня следующая ситуация:

Я разрабатываю адресное приложение для хранения информации о наших клиентах.

У меня есть следующая db-структура:

Clients hasMany Addresses
Addresses belongsTo Client
Addresses hasMany AddressEmails and AddressPhones

Если кто-то сейчас добавляет нового клиента, его основной адрес с 1 электронным письмом и 1 телефонным номером должен быть сохранен.

Это отчасти работает очень хорошо, если я делаю это в представлении добавления клиента сследующий код и вызовите метод saveAll в клиентском контроллере:

 <?php
  echo $this->Form->input('client_group_id');
  echo $this->Form->input('company');
  echo $this->Form->input('firstname');
  echo $this->Form->input('lastname');
  echo $this->Form->input('www');
  echo $this->Form->input('Address.0.is_standard', array('type' => 'hidden', 'value' => '1'));
  echo $this->Form->input('Address.0.street');
  echo $this->Form->input('Address.0.zip');
  echo $this->Form->input('Address.0.city');
 ?>

Но я понятия не имею, как сохранить электронную почту и номер телефона в этом представлении.Трид думает как AddressEmail.0.email, но это не сработало.


Понял:

С опубликованным решением Ника все работает нормально, я сейчас звоню $ this->Client-> Address-> saveAll ($ this-> data), но пришлось настроить мой add-view следующим образом:

<?php
    echo $this->Form->input('client_group_id');
    echo $this->Form->input('company');
    echo $this->Form->input('firstname');
    echo $this->Form->input('lastname');
    echo $this->Form->input('www');
    echo $this->Form->input('Address.is_standard', array('type' => 'hidden', 'value' => '1'));
    echo $this->Form->input('Address.street');
    echo $this->Form->input('Address.zip');
    echo $this->Form->input('Address.city');
    echo $this->Form->input('AddressEmail.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressEmail.0.email');
    echo $this->Form->input('AddressPhone.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressPhone.0.number');
?>

Поскольку я сейчас вызываю метод saveAll () - из Address-Модели нули больше не нужны!

1 Ответ

2 голосов
/ 05 августа 2010

Сохранение связанных данных с помощью saveAll () будет работать только для напрямую связанных моделей.

Таким образом, в основном вы можете сохранить с помощью клиента saveAll () (как основной модели) и адресов.Электронные письма и телефоны, которые вы могли бы сделать, сохранив модель Adress, например:

$this->Client->saveAll($data); //This saves Client and Address
$this->Client->Address->saveAll($data); //This saves Email and Phone

Я не тестировал ее, но она должна работать таким образом.(при условии, что ваши поля соответствуют соглашению об именах, например:

echo $this->Form->input('Email.0.field');
echo $this->Form->input('Email.1.field');
echo $this->Form->input('Email.2.field');
echo $this->Form->input('Phone.0.number');
echo $this->Form->input('Phone.1.number');
echo $this->Form->input('Phone.2.number');

Я не уверен, будет ли он "ловить" идентификатор адреса напрямую, но вы можете попробовать.

Другой способ -сохранить модель только из

$this->Client-Address->saveAll($data);

. Таким образом будут сохранены все связанные модели (в соответствии с документацией - см. сначала довольно).

...