Обновление нескольких отношений HABTM в CakePHP - PullRequest
0 голосов
/ 28 января 2011

В кулинарной книге Cake все примеры, похоже, используют save() / saveAll() для обновления отношений HABTM для одной записи за раз. Однако я хотел бы создать много-много ассоциаций, используя один вызов. Например, у меня 3 концертных мероприятия и 2 флаера. И я хочу, чтобы эти два флаера были связаны с каждым из концертных мероприятий.

У меня есть 2 таблицы, events, flyers и таблица соединений: events_flyers. Так что, я полагаю, я мог бы просто добавить записи в таблицу соединений вручную. Но мне было интересно, есть ли способ сделать что-то похожее на:

$this->Event->updateAll(
  $flyers,
  array('festival_id' => $id)
)

Или updateAll() работает только на обычных полях?

1 Ответ

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

В этом ответе не используется updateAll, но я знаю, что вы можете создавать ассоциации HABTM, используя save и специально введенные данные в $this->data:

// load an Event
$this->data = $this->Event->read(null, $eventId);

// associate the Event with two Flyers
$this->data['Flyer']['Flyer'] = array($flyerId1, $flyerId2);

// save the Event (and HABTM associations)
$this->Event->save($this->data);

Итак, используя это, не могли бы вы сделать еще один шаг и использовать saveAll вместе с несколькими записями событий? Например:

$this->data = $this->Event->find('all', array('conditions' => array('Event.id' => $eventIdList)));

foreach ($this->data as $event) {
    $event['Flyer']['Flyer'] = array($flyerId1, $flyerId2);
}

$this->Event->saveAll($this->data);

Это работает для вас?

...