CakePHP relacje między tabelami część 2

Kontynujemy poprzednią część. Tym razem zajmiemy się zapisem powiązanych danych w bazie. Zaczniemy od najprostszej metody zapisu powiązanych danych. W kontrolerze PhoneNumbersController (src/Controller/PhoneNumbersController.php) w funkcji add musimy załadować userów.

public function add()
{
    ...
    $users = $this->PhoneNumbers->Users->find('list');
    $this->set(compact('phoneNumber', 'users'));
    ...
}
Ponadto w pliku templatu src/Templates/PhoneNumbers/add.ctp dodajmy pole do wyboru użytkownika.
<?php echo $this->Form->create($phoneNumber);
    ...
    echo $this->Form->input('user_id');
    ...
CakePHP automatycznie zapełni listę rozwijaną w polu user_id listą użytkowników przechowywanych w zmiennej $users. Problem z powyższą metodą jest taki, że użytkownik jest zmuszony do wybierania użytkownika za każdym razem, gdy dodaje numer telefonu, ponieważ użytkownik jest polem wymaganym w naszym przykładzie. Aby to uprościć, możesz wyświetlić użytkownika, a następnie dodać link "dodaj", który przeniesie Cię do funkcji add, przekazując identyfikator użytkownika. W widoku (view) użytkowników (/src/Template/Users/view.ctp) dodajemy link:
<h4><?php echo __('Phone Numbers'); ?></h4>
<?php echo $this->Html->link(__('Add Phone Number'), ['controller' => 'PhoneNumbers', 'action' => 'add', $user->id]); ?>
Następnie modyfikujemy funkcję dodawania numerów telefonów w kontrolerze (src/Controller/PhoneNumbersController.php), aby przyjąć identyfikator użytkownika i przekazać go do widoku.
public function add($user_id = null)
{
   ...
   $this->set(compact('phoneNumber', 'users', 'user_id'));
   ...
}
Na koniec ustawiamy wartość user_id w widoku src/Templates/PhoneNumbers/add.ctp.
echo $this->Form->input('user_id', ['value' => $user_id]);
Możemy również dodawać powiązane rekordy bezpośrednio z bieżącego modelu. Najpierw dodajemy pola do widoku add użytkowników (src/Template/Users/add.ctp), aby dodać numery telefonów.
<h4><?php echo __('Phone Numbers'); ?></h4>
<table><tr><th>Type</th><th>Number</th></tr>
    <tr>
        <td><?php echo $this->Form->input('phone_number.type', ['options' => ['H' => 'H', 'W' => 'W', 'M' => 'M']]); ?></td>
        <td><?php echo $this->Form->input('phone_number.number'); ?></td>
    </tr>
</table>
Kiedy zapiszesz swojego użytkownika, CakePHP automatycznie zapisze powiązane dane z nowym user_id, o ile przestrzegane są konwencje.