Рекурсивные отношения Многие со многими с Yii

У меня рекурсивные отношения многие ко многим с objective, Моя реляционная модель:

CREATE TABLE master.objectives
(
  id serial NOT NULL,
  name character varying(100),
  CONSTRAINT pkey_objectives PRIMARY KEY (id),
  CONSTRAINT fk_objectives_perspective FOREIGN KEY (perspective_id)
      REFERENCES master.perspective (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE master.relatedobjectives
(
  parent integer NOT NULL,
  child integer NOT NULL,
  CONSTRAINT relatedobjectives_pkey PRIMARY KEY (parent, child),
  CONSTRAINT fk_child_objectives FOREIGN KEY (child)
      REFERENCES master.objectives (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_paret_objectives FOREIGN KEY (parent)
      REFERENCES master.objectives (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

Моя модель была сгенерирована в рамках Yii с помощью gii, как показано ниже:

Objective.php

public function relations() {
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'parents' => array(self::HAS_MANY, 'Relatedobjectives', 'parent'),
        'children' => array(self::HAS_MANY, 'Relatedobjectives', 'child'),
    );
}

Цели /_form.php

<div class="row">
    <?= $form->checkBoxList($model,'parents', 
                            CHtml::listData(Objective::model()->findAll(array('order' => 'id')), 'id', 'name')
            ) ?>
</div>

В представлении, когда я отправляю форму, не сохраняйте отношения в таблице связанных целей.

Что я делаю неправильно?

1 ответ

Решение

Связанные модели не сохраняются вместе с родительской моделью. Вы должны сохранить их вручную у родителей beforeSave() или же afterSave() крючки. Есть также некоторые расширения, которые могут сделать это автоматически. Посмотрите здесь некоторую информацию по этой теме.

Другие вопросы по тегам