У меня есть приложение для управления событиями, где владельцы событий могут импортировать список адресов электронной почты, чтобы добавить их к своему событию.Приложение должно создать запись Member для каждого адреса электронной почты, а затем создать запись EventsMember, связывающую каждого нового участника с событием.
Вся причина сделать это с помощью saveAll () состоит в том, чтобы (а) минимизировать числовызовов SQL (может быть тысячи членов на событие, и я не хочу разрабатывать функцию импорта для запуска одного оператора SQL на каждого члена :) и (б) использовать транзакции.Я открыт для других способов сделать это, использующих эффективность CakePHP.
Итак, я читаю список из файла и создаю массив для передачи в метод saveAll () модели Member;Я знаю, что могу добавить каждого члена с таким массивом:
$data = Array(
'0' => Array('email' => 'nobody@nowhere.com'),
'1' => Array('email' => 'somebody@nowhere.com'),
...
);
$this->Member->saveAll($data);
, и это работает нормально.Но я хочу иметь возможность создавать связанные записи EventsMember одновременно, но я не уверен, какой формат должны принимать данные, или если это вообще возможно.Я пытался:
$data = Array(
'0' => Array(
'email' => 'nobody@nowhere.com'),
'Event' => Array('id' => 10);
),
'1' => Array(
'email' => 'somebody@nowhere.com'),
'Event' => Array('id' => 10);
),
...
);
$this->Member->saveAll($data);
и
$data = Array(
'0' => Array(
'email' => 'nobody@nowhere.com'),
'Event' => Array(
'0' => Array('id' => 10);
)
),
'1' => Array(
'email' => 'somebody@nowhere.com'),
'Event' => Array(
'0' => Array('id' => 10);
)
),
...
);
$this->Member->saveAll($data);
, но они оба только создавали записи участников и игнорировали встроенные данные события.
Я знаю, что мои отношенияработает правильно, так как другие функции CakePHP (автоматические объединения и рекурсивные находки, каскадное удаление и т. д.) работают отлично.
Спасибо за ваши идеи!