【发布时间】:2013-04-29 02:50:05
【问题描述】:
我正在尝试构建一个简单的书签站点作为一个项目来学习一些 CakePHP,但是在弄清楚如何为书签/标签执行 HABTM(或我可能需要的任何东西)时遇到了很大的麻烦。
我有一个简单的表单,其中包含“标题”、“网址”、“标签”字段,用于创建新书签。
我的表设置如下:
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>
正如我所说,我对 Cake 很陌生,所以我不确定这里发生了什么..目前,如果我在该表单中输入数据并点击提交,书签会创建得很好,但什么都没有发生标签。如何将数据保存到关联的联接表和标签表中?
【问题讨论】:
-
首先,您提到的“控制器”实际上是您的“模型”,这当然可能是一个错字。那些在“模型”目录中吗?另外,您可以发布您的 BookmarkController 的相关代码吗?
-
抱歉 - 控制器位是错字,已经很晚了。它们位于模型目录中。我已经移动了一点只是为了让项目工作(它是为了一个班级......我选择使用 cakephp 来体验它,虽然任务指定了 php - 所以现在我正在使用一些糟糕的 cakephp 标准并使用 query() 进行大部分模型工作)。因此,我当前的 BookmarkController 甚至没有利用添加中的 HABTM - 我现在正在手动进行。但原版看起来像 if($this->Bookmark->saveAll($this->request->data)){...}
标签: php cakephp cakephp-model