Свежайшие Пирожки от CakePHP по-русски

Полнейшее руководство CakePHP 1.2 на русском языке, горячие новости и полезные статьи

Допустим у нас есть User hasMany Comment, и мы хотели бы сохранить несколько новых пользователей, и для каждого из них добавить комментарий.
Для начала, построим нашу форму(view): <?php
    echo $form->create();

    echo $form->input('1.User.name');
    echo $form->input('1.Comment.0.comment');

    echo $form->input('2.User.name');
    echo $form->input('2.Comment.0.comment'); 

    echo $form->end('Save');

?>

Вы наверное заметили, что имена полей несколько необычные. Если мы будет назвать поля начиная с цифрового индекса, то это поможет нам получить "правильный" массив данных, приведенный ниже(обратите внимание индекс не должен быть равен нулю, но об этом чуть позже*) Array
(
    [1] => Array
        (
            [User] => Array
                (
                    [name] => bob
                )

            [Comment] => Array
                (
                    [0] => Array
                        (
                            [comment] => nice guy
                        )

                )

        )

    [2] => Array
        (
            [User] => Array
                (
                    [name] => dave
                )

            [Comment] => Array
                (
                    [0] => Array
                        (
                            [comment] => pain in the ass
                        )

                )

        )

)

Затем данные передаются в контроллер: <?php function add() {
        if(!empty($this->data)) {
            foreach($this->data as $data) {
                    $this->User->saveAll($data);
            }
        }
    }
?>
И наши данные благополучно сохраняются.
*Ну а теперь расскажем, почему индекс не должен равняться нулю.
Попробуйте у себя следующую штуку:  <?php echo $form->input('0.User.name'); ?>  
Результат: <input name="data[User][User][name]" type="text" maxlength="100" value="" id="UserUserName" />

Оригинал статьи: http://teknoid.wordpress.com/2009/03/26/saveall-with-multiple-records-and-for-multiple-models


Все статьи о CakePHP