2010-12-01 58 views
0

当我向其中一个habtm模型添加hasOne关系时发生此问题。 categories_posts现在不保存数据库中的任何内容。我以前做过。在CakePHP中保存hasOne与HABTM

现在,我有如下形式是这样的:

<?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' 
)); 
} 

Post模型是这样的:

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" 
    } 
} 

为什么ISN 't categories_posts保存?

回答

1

似乎所有我需要做的是有这个形式:

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