Метод afterUpdate
Сообщение: Здравствуйте! при обновлении страницы работаю с методом afterUpdate. Столкнулся с тем что не создается запись в другую таблицу. Но если делать запрос на вставку в таблицу той модели в которой идет запрос , то запись создается. Делаю так - $this->db->query("insert into pages set name = '{$name}' ");
Игорь, добрый день, метод afterUpdate (и аналогичные ему) исполняется после того как запись была обновлена и новые данные уже находятся в таблице. Если нужно как-то изменить данные перед вставкой в таблицу, то лучше применить метод beforeUpdate, пример есть тут http://mv-framework.ru/nastroika-modeli/
Если вы изменяете данные в таблице прямым запросом (как в вашем примере), то все должно работать при запросе в любую таблицу.
Если мы не совсем правильно поняли вопрос, добавьте пример кода метода beforeUpdate и в какой моделе он вызывается.
Хорошо, но как обновить данные связи многие ко многим ? я передаю строку вида 1,2,3 но она не меняет отношение... как быть ?
Многие ко многим обновляются системой автоматически. Если в модели есть такое поле (или несколько полей),и оно правильно настроено, то система сама его обновит и заполнит связующую таблицу.
Так вот если это поле редактировать то да все нормально.
Но если вызываю метод beforeUpdate и в нем делаю return $fields['keywords'] = '1,2,3'; то изменения не происходят связей.
Скажите как в методе изменить это поле связей ? ведь возвращаю я правильную строку, а изменений нет .
в моде определение связей array("Текстовые блоки", "many_to_many", "keywords", array("related_model" => "Keywords", "linking_table" => "pages_keywords")),
Да, теперь понятно, обновления действительно не произойдет, дело в том, что многие ко многим - поле как бы виртуальное, ячейки с его значением в родительской модели нет и значение в настоящий момент нельзя обновить "на лету" в beforeUpdate().
Альтернативным вариантом может стать такой код в afterUpdate($id, $new_fields)
$record = $this -> findRecordById($id); $record -> keywords = '1,2,3'; $record -> update();
Спасибо большое! За быстрый ответы и за внимание.