CakePHP обновляет дополнительное поле в таблице соединений HABTM - PullRequest
1 голос
/ 13 июля 2011

У меня проблема с обновлением (лучше не воссозданием) дополнительного поля в таблице соединений HABTM.Я искал в Google и других источниках, но боролся в течение 4 дней.

У меня есть модели:

class Tutorial extends AppModel {
  var $hasAndBelongsToMany = array(
    'TutorialCategory' => array(
      'with' => 'TutorialCategoriesTutorial',
      'order' => 'TutorialCategoriesTutorial.order_by ASC',
      'unique' => true,
  );
}

class TutorialCategory extends AppModel {
  var $hasAndBelongsToMany = array(
    'Tutorial' => array(
      'with' => 'TutorialCategoriesTutorial',
      'unique' => true,
  );
}

таблица присоединения tutorial_categories_tutorial имеет идентификатор, tutorial_id, tutorial_category_id, поля order_by.

Я пытаюсь обновить поле order_by, например:

$order = 1;
foreach($tutorials as $i => $tutorial) {
  $this->data[$i]['Tutorial']['id'] = $tutorial['Tutorial']['id];
  $this->data[$i]['TutorialCategory']['id'] = $tutorial['TutorialCategory']['id];
  $this->data[$i]['TutorialCategoriesTutorial']['order_by'] = $order;

  ++$order;
}
$this->Tutorial->bindModel(array('hasMany' => array('TutorialCategoriesTutorial')));
$saved = $this->Tutorial->saveAll($this->data);

Это удаление и создание новых записей в объединяемой таблице, но не установка order_by вообще.Я хочу обновить запись и установить значение order_by.Я пытался через многое, но не повезло.

Пожалуйста, помогите и / или дайте совет и объяснение.

Спасибо!

1 Ответ

3 голосов
/ 13 июля 2011

Поскольку вы добавили дополнительные данные (поле заказа) в модель соединения HABTM, вы фактически превысили возможности простого отношения HABTM с CakePHP. На самом деле вам нужно настроить hasMany Through .

В вашем случае вы в основном создадите модель «членства» с идентификатором Tutorial ID, идентификатором catergory и таким количеством данных, которое хотите назначить. Затем вы определите отношения как членство, принадлежащее учебнику и категории. Книга, вероятно, имеет лучший пример, чем то, что я только что объяснил!

Основная причина этого заключается в том, что каждая запись «членства» рассматривается как обычная запись без привязанного к ней поведения HABTM, поэтому вы можете редактировать, удалять и добавлять записи по отдельности и легко.

...