CakePHP Gurus: возможен ли мой сложный сценарий? - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть приложение для управления событиями, где владельцы событий могут импортировать список адресов электронной почты, чтобы добавить их к своему событию.Приложение должно создать запись 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 (автоматические объединения и рекурсивные находки, каскадное удаление и т. д.) работают отлично.

Спасибо за ваши идеи!

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Ну, я не гуру CakePHP, но при сохранении отношений вы не должны использовать "EventsMember" просто "Events" (или название модели), например, вы получаете Member, так что это будет похоже на

        $data = array(

            'Member' => array('email' => 'johndoe@google.com'),
            'Event' => array( // many events array of records
                'Event' => array('event_id', 1), // this is a new record
                'Event' => array('event_id', 3) // second record to relate to johndoe
            )
        );
$this->Member->saveAll($data);

Модель Member позаботится обо всех отношениях, поэтому, если модель Member правильно установила отношение, как вы упомянули, оно должно работать.

0 голосов
/ 27 февраля 2011

В конце концов мне пришлось объединить методы сохранения нескольких записей и сохранения записей HABTM, как описано allenskd. Процесс выглядит так:

$data = array(
  '0' => array(
    'Member' => array('email' => 'nobody@nowhere.com'),
    'Event' => array('id' => 10)
  ),
  '1' => array(
    'Member' => array('email' => 'somebody@nowhere.com'),
    'Event' => array('id' => 10)
  ),
  ...
);
$this->Member->saveAll($data);

Теперь у меня немного другая проблема: как получить дополнительную информацию в записи EventsMember, но это для другого сообщения :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...