0
我试图建立一个简单的书签网站作为一个项目来学习一些CakePHP,但我很难找出如何做HABTM(或任何我可能需要)书签/标签。CakePHP 2.X:HABTM与书签/标签,从相同的表格保存
我有一个简单的表单,其中包含用于创建新书签的字段'Title','Url','Tags'。
我的表设置如下:
bookmarks: id (primary), uid, title, url, private (boolean), time
tags: id (primary), tag
bookmarks_tags: id (primary), bookmark_id, tag_id
还有一个用户表。
我的书签模型(Bookmark.php)是非常简单的,到目前为止,看起来像:
class Bookmark extends AppModel {
public $name = "Bookmark";
public $displayField = 'name';
public $hasAndBelongsToMany = array(
'Tag' => array(
'className' => 'Tag',
'joinTable' => 'bookmarks_tags',
'foreignKey' => 'bookmark_id',
'associationForeignKey' => 'tag_id',
'unique' => 'keepExisting',
)
);
然后一些验证。
标签模型是这样的:
class Tag extends AppModel {
public $name='Tag';
public $displayField = 'name';
public $hasAndBelongsToMany = array(
'Bookmark' => array(
'className' => 'Bookmark',
'joinTable' => 'bookmarks_tags',
'foreignKey' => 'tag_id',
'associationForeignKey' => 'bookmark_id',
'unique' => 'keepExisting',
)
);
在前端的形式,到目前为止是这样的:
<div id="addBookmark" class="card">
<div id="addBookmarkTopSpan" class="topSpan">add new bookmark</div>
<?php echo $this->Form->create(null, array('url' => array('controller' => 'bookmarks', 'action' => 'add'))); ?>
<fieldset>
<?php echo $this->Form->input('Bookmark.title');
echo $this->Form->input('Bookmark.url');
echo $this->Form->input('Bookmark.private', array('type' => 'checkbox'));
echo $this->Form->input('Bookmark.uid', array('type' => 'hidden', 'value' => $user['User']['id']));
echo $this->Form->input('Bookmark.Tag');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
正如我所说的,我很新的蛋糕,所以我不知道这里发生了什么事情。目前,如果我将数据输入到该表单并点击提交,书签就会被创建得很好,但标签没有任何变化。如何将数据保存到关联的连接表和标签表中?
首先,你所提到的是你的“控制器',实际上是你的'模特',当然这可能是一个错字。那些在'模型'目录里面?另外,你可以发布你的BookmarkController的相关代码吗? – thaJeztah 2013-05-05 17:48:16
对不起 - 控制器位是一个错字,很晚了。它们在Model目录中。为了让项目能够正常工作(这是为了一个类...我选择使用cakephp来体验它,尽管该任务指定了php - 所以现在我使用了一些可怕的cakephp标准并在大部分模型工作中使用query())。所以我当前的BookmarkController甚至没有利用添加中的HABTM - 我现在手动完成它。但原来看起来像if($ this-> Bookmark-> saveAll($ this-> request-> data)){...} – Yair 2013-05-06 18:08:39