сохранить все данные в одном выражении без цикла

Как сохранить все данные в cakePHP. Предположим, у меня есть несколько записей, касающихся одной модели. Я хочу сохранить все данные за раз. Мой массив в формате.

Array
(
[Attendance] => Array
    (
        [0] => Array
            (
                [date] => 2013-10-09
                [user_id] => 10
                [attendance] => 1
            )

        [1] => Array
            (
                [date] => 2013-10-09
                [user_id] => 8
                [attendance] => 0
            )
    )
)

Возможно ли сохранить все данные за один раз. Я пытался сделать это с помощью saveMany, но безуспешно.

Мне нужно сделать это в цикле

foreach ($result as $data) {
                $this->Attendance->create();
                $this->request->data['Attendance'] = $data;
                $this->Attendance->save($this->request->data);
}

person Sankalp    schedule 09.10.2013    source источник


Ответы (2)


Попробуйте saveMany вместо сохранения

$this->Attendance->saveMany($this->request->data);

данные должны быть в таком формате:

Array
(
[1] => Array
    (
        [Attendance] => Array
            (
                [field] => value
                [field] => value
            )
    )

[2] => Array
    (
        [Attendance] => Array
            (
                [field_1] => value
                [field_2] => value
            )
    )
)
person Moyed Ansari    schedule 09.10.2013
comment
Спасибо дружище. Моя последовательность $this->request->data была неправильной. Это сработало ... Что будет, если я отправлю идентификатор для нескольких записей ?? Будет ли он обновлять эти записи и сохранять новые. - person Sankalp; 09.10.2013
comment
да, в этом случае он должен обновлять записи, если находит идентификаторы. рад, что это работает для вас - person Moyed Ansari; 09.10.2013

CakePHP сохранит каждую запись для каждого идентификатора, который у вас есть в массиве. Единственное требование - использовать соглашение о структуре массива, а затем использовать:

    // Check method request
    if ($this->request->is('post')) {
        // Check not empty data
        if (!empty($this->data)) {
            // Save the data
            if ($this-> Attendance->save($this->request->data)) {
                // Set a session flash message and redirect.
                $this->Session->setFlash('Attendance saved.');
                $this->redirect('/Attendances');
            } else {
                $this->Session->setFlash('Error saving the data.');                
            }
        }
    }
person Domingo C.    schedule 09.10.2013