在 CakePHP 中使用 HABTM 保存 hasOne
Posted
技术标签:
【中文标题】在 CakePHP 中使用 HABTM 保存 hasOne【英文标题】:Saving hasOne with HABTM in CakePHP 【发布时间】:2010-12-01 04:38:20 【问题描述】:当我将 hasOne 关系添加到其中一个 habtm 模型时,就会出现此问题。 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】:看来我需要做的就是把它写成这样:
echo $this->Form->input('Category.Category', array('multiple' => 'checkbox'));
【讨论】:
以上是关于在 CakePHP 中使用 HABTM 保存 hasOne的主要内容,如果未能解决你的问题,请参考以下文章
cakephp 在不使用视图的情况下保存 HABTM 关系的数据