在CakePHP中使用HABTM保存hasOne

时间:2010-12-01 04:38:20

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

当我向其中一个habtm模型添加hasOne关系时,会出现此问题。 categories_posts现在不保存数据库中的任何内容。我之前做过。

现在,我的形式是:

<?php
echo $this->Form->create('Post');
echo $this->Form->input('Post.title');
echo $this->Form->input('Post.Category', array('multiple' => 'checkbox'));
echo $this->Form->input('Post.body', array('rows' => '3'));

echo $this->Form->input('Page.title');
echo $this->Form->input('Page.uri');
echo $this->Form->input('Page.meta_keywords');
echo $this->Form->input('Page.meta_description');
echo $this->Form->input('Page.layout');

echo $this->Form->end('Save Post');
?>

页面模型如下所示:

class Page extends AppModel {
 var $name = 'Page';
 var $order = array('Page.modified' => 'desc');

 var $hasOne = array(
  'Post' => array(
   'className' => 'Post'
  ));

 var $hasMany = array(
  'Snippet' => array(
   'className' => 'Snippet'
  ));
}

帖子模型如下:

class Post extends AppModel {
 var $name = 'Post';
 var $hasAndBelongsToMany = array(
  'Category' => array(
   'className' => 'Category'
  )
 );
 var $belongsTo = array(
  'Page' => array(
   'className' => 'Page'
  )
 );
 var $actsAs = array('Containable');
 var $virtualFields = array(
  'date_posted' => 'DATE_SUB(Post.created, INTERVAL 7 DAY)'
 );

}

类别模型如下所示:

class Category extends AppModel {
    var $name = 'Category';
    var $hasAndBelongsToMany = array(
        'Post' => array(
            'className' => 'Post'
        )
    );

    var $actsAs = array('Containable');
}

我的表有点像这样:

categories
id name

categories_posts
category_id post_id

pages
id title uri meta_keywords meta_description layout created modified

posts
id page_id title uri body created modified

这是执行保存的方法

function admin_add() {
    $this->set('categories', $this->Post->Category->find('list'));

    if ( ! empty($this->data)) {
        if ($this->Post->saveAll($this->data)) {
            $this->Session->setFlash('Your post has been saved', 'flash_good');
            $this->redirect($this->here);
        } else {
            $this->Session->setFlash('Your post has not been saved','flash_bad'); 
        }
    }
}

这是提交时的示例数组:

array(2) {
  ["Post"]=>
  array(3) {
    ["title"]=>
    string(10) "Post Title"
    ["Category"]=>
    array(4) {
      [0]=>
      string(1) "1"
      [1]=>
      string(1) "2"
      [2]=>
      string(1) "3"
      [3]=>
      string(1) "4"
    }
    ["body"]=>
    string(16) "<p>Post Body</p>"
  }
  ["Page"]=>
  array(5) {
    ["title"]=>
    string(10) "Page Title"
    ["uri"]=>
    string(0) ""
    ["meta_keywords"]=>
    string(11) "Page Meta K"
    ["meta_description"]=>
    string(11) "Page Meta D"
    ["layout"]=>
    string(11) "Page Layout"
  }
}

为什么categories_posts没有保存?

1 个答案:

答案 0 :(得分:1)

似乎所有我需要做的就是以下面的形式:

echo $this->Form->input('Category.Category', array('multiple' => 'checkbox'));