2013-10-08 3 views
0

У меня есть модель модели и видео модели, что связано с отношением toTo и hasMany. Мне нужно в контроллере Comment (в одном действии) загружать подключенное видео, изменять его один атрибут, а затем сохранять комментарии и видео. Я знаю, как изменить модель комментариев, но я никак не могу изменить модель видео.Модель загрузки CakePhp в другой модели и изменить ее данные

Это моя функция:

$this->Comment->id = $id; 
    if($this->Comment->exists()){ 
     $this->loadModel('Comment'); 
     $this->Comment->set('accepted', 1); 
     if($this->Comment->save()){ 
      $this->Session->setFlash('Comment accepted'); 
      //HOW TO CHANGE ATTR OF VIDEO 
      //in $this->Comment->video_id there is NULL 
     } 
     else 
      $this->Session->setFlash('Can't accept comment'); 

     $this->redirect($this->request->referer()); 
    } 
    else{ 
     throw new NotFoundException(__('Invalid comment')); 
    } 

Можете ли вы помочь мне, ребята?

ответ

2

Две вещи:

Во-первых, вам не нужно называть это вообще:

$this->loadModel('Comment'); 

Чуть выше линии, где вы называете $this->loadModel('Comment');, у вас есть строка о том, $this->Comment->id. $this->Comment - пример вашей модели комментариев. В Cake каждый контроллер имеет экземпляр соответствующей модели, доступный $this->ModelName.

Во-вторых, ваша модель комментариев будет иметь экземпляр вашей видеомодели. Таким образом, ваша модель видео уже будет доступна через ваш комментарий контроллер, на $this->Comment->Video

Таким образом, чтобы изменить видео модели, вы кулак должны получить VIDEO_ID комментария, а затем сделать это:

$this->Comment->Video->id = $videoId; 
$this->Comment->Video->set('accepted', 1); 
$this->Comment->Video->save() 
+0

Но как я могу получить данные из видео. Мне нужно получить текущую стоимость, изменить ее и сохранить. Также когда я делаю: $ this-> Comment-> Video-> id = $ videoId; и Video не существует, он создается в DB (все attrs empty) – Chris

+0

Вы уже получаете текущее значение, изменяете его и сохраняете его для комментариев, поэтому вы просто используете ту же логику для видео, только вы получаете доступ к нему через $ this-> Comment-> Видео, а не $ this-> Комментарий –

+0

$ this-> Комментарий-> video_id имеет значение null. $ this-> Комментарий-> Видео-> ставка равна нулю. Я нашел решение для чтения комментария как массива, получить видео_ид, прочитать видео, прочитать значение и изменить его. – Chris

Смежные вопросы