Yii Call beforeSave() в другой модели для сохранения

Я создал две таблицы: forum_post и галерею.

таблица forum_post:

id user_id сцтус photo_id

1 1 привет...! NULL
2 1 привет! NULL
3 1 NULL 1

4 1 НУЛЕВОЕ 2

таблица user_gallery:

id user_id изображение видео

1 1 1.jpg НОЛЬ

2 1 новый.gif NULL

Когда пользователь загружает файл изображения в таблицу user_gallery, я хочу создать одну строку в таблице forum_post и сохранить идентификатор галереи в поле forum_post-> image. а также идентификатор пользователя, также хранящийся в таблице forum_post.

Код моей модели в ForumPost:

public static function addForumImage($id, $user_id) {
    $forumImage = ForumPost::model()->find('LOWER(photo_id) = ?',  array( strtolower($image)));
    if (!$forumImage) {
        $forumImage = new ForumPost;
        $forumImage->photo_id = $image;
        $forumImage->save(false);
    }

Функция UserGallery перед сохранением:

protected function beforeSave() {
    if (parent::beforeSave()) {

        ForumPost::addForumImage($this->id, $this->user_id);
        // var_dump($forumPost->photo_id);
        return true;
    }
    return false;
}

Мое отношение к таблице: user_gallery->image ссылается на forum_post->photo_id.

Теперь изображение хранится в папке user_gallery, и я не могу получить идентификатор в модели ForumPost... Пожалуйста, помогите мне... :(


person Selvakumar Kaliyappan    schedule 27.12.2013    source источник


Ответы (1)


попробуй это

protected function beforeSave() {
    if (parent::beforeSave()) {

        ForumPost::addForumImage($this->id, $this->user_id, $this->forum_image);
        // var_dump($forumPost->photo_id);
        return true;
    }
    return false;
}

Модель

    public static function addForumImage($id, $user_id,$image) {
        $forumImage = ForumPost::model()->find('photo_id = :image',  array( ':image'=>strtolower($image)));
        if (empty($forumImage)) {
            $forumImage = new ForumPost;
            $forumImage->user_id=$user_id;
            $forumImage->content= NULL
            $forumImage->photo_id = $image;
            $forumImage->save(false);
        }
}
person Let me see    schedule 27.12.2013
comment
Теперь я получаю следующую ошибку: CDbCommand не удалось выполнить оператор SQL: SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не работает (nh.forum_post, CONSTRAINT fk_forum_post_gallery FOREIGN KEY ( photo_id) ССЫЛКИ user_gallery (id) НА КАСКАД УДАЛЕНИЯ НА КАСКАД ОБНОВЛЕНИЯ). Выполненный оператор SQL был следующим: INSERT INTO forum_post (status, user_id, content, photo_id, updated, created) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5) - person Selvakumar Kaliyappan; 27.12.2013
comment
измените свой метод на afterSave() - person Let me see; 27.12.2013
comment
эта ошибка возникает из-за того, что вы пытаетесь создать строку в таблице с внешним ключом. поэтому сначала создайте строку в таблице первичного ключа - person Let me see; 27.12.2013
comment
в порядке. но без связи с внешним ключом, как я могу получить идентификатор user_gallery для forum_post? - person Selvakumar Kaliyappan; 27.12.2013