Вопрос по – CakePHP 2.1 сохранение полей HABTM

3

У меня есть две модели User и Movie. Где они связаны с UsersWatchlist ..

public $hasAndBelongsToMany = array('User' => array(
        'className' => 'User',
        'joinTable' => 'users_watchlists',
        'foreignKey' => 'movie_id',
        'associationForeignKey' => 'user_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
))

public $hasAndBelongsToMany = array(
   'Movie' => array(
        'className' => 'Movie',
        'joinTable' => 'users_watchlists',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'movie_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
))
public $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Movie' => array(
        'className' => 'Movie',
        'foreignKey' => 'movie_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ))

Я создал "список наблюдения" действие в UsersController .. код ниже

public function watchlist($id = null) {
    $userid = 3;
    if (!$id && $userid != 3) {
        $this->Session->setFlash('Invalid Movie');
        $this->redirect($this->referer(array('action' => 'listing')));
    }
    $this->request->data['User']['id'] = $userid;
    $this->User->UsersWatchlist->create();
    debug($this->User->UsersWatchlist->saveAll(array('user_id' => '2', 'movie_id' => 3)));
    if ($this->User->UsersWatchlist->saveAll($this->request->data)) {
        $this->Session->setFlash('The movie has been added to your watchlist', 'admin/flash_success');
        $this->redirect($this->referer(array('action' => 'listing')));
    } else {
        $this->Session->setFlash('The movie could not be added to your watchlist. Please, try again.', 'admin/flash_error');
        $this->redirect($this->referer(array('action' => 'listing')));
    }  
}

Итак, я получаю ошибку при сохранении .. Пожалуйста, сообщите мне решение

Какую ошибку вы получаете? Saanch

Ваш Ответ

2   ответа
4

ваши данные должны выглядеть следующим образом (при условии, что вы хотите сохранить их через пользовательскую модель):

$this->request->data = array(
    'User' => array(
        'id' => '2',
    ),
    'Movie' => array(
        'Movie' => array(
            (int) 0 => '3',
        ),
    ),
);

Основная ошибка, которую я вижу, заключается в том, что вы пытаетесь сохранить через модель соединения, где вы должны сохранять через модель пользователя. Так что в контроллере используйте:

$this->User->saveAll($this->request->data)

Если данные соответствуют описанным выше, они должны работать нормально. Я думал, что ответил на ваш вопросВот.

Надеюсь это поможет. Ура!

Этот формат работает.['Movie']['Movie'] это числовой массив идентификаторов из соответствующей модели.
2

по которой вы связали модель соединения HABTM с этими двумя моделями (пользователь, фильм)? Вы можете достичь того же эффекта, поместив первый $ HABTM в модель Movie и второй $ HABTM в модель User. Вам не нужно создавать модель промежуточного соединения, торт сделает это за вас, вам нужен только стол.

Похожие вопросы