【问题标题】:CakePHP 2.1 saving HABTM fieldsCakePHP 2.1 保存 HABTM 字段
【发布时间】:2012-05-03 09:05:27
【问题描述】:

我有两个模型 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')));
    }  
}

所以我在保存时遇到错误。请告诉我解决方案

【问题讨论】:

    标签: cakephp cakephp-2.0 has-and-belongs-to-many


    【解决方案1】:

    首先你的数据应该是这样的(如果你想通过用户模型保存它):

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

    我看到的主要错误是您尝试通过联接模型进行保存,而您应该通过用户模型进行保存。所以在控制器中使用:

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

    如果数据如上所述,它应该没问题。我想我已经回答了你的问题here

    希望这会有所帮助。 干杯!

    【讨论】:

    • 这种格式确实有效。 ['Movie']['Movie'] 是对应模型的 ID 的数值数组。
    【解决方案2】:

    你的联想似乎很有趣。您将 HABTM 连接模型与两个模型(用户、电影)相关联是否有原因?您可以通过将第一个 $HABTM 放在 Movie 模型中,将第二个 $HABTM 放在 User 模型中来实现相同的效果。您不需要创建中间连接模型,cake 会为您完成,您只需要表格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多