【问题标题】:Issue with saving HABTM data in CakePHP在 CakePHP 中保存 HABTM 数据的问题
【发布时间】:2013-09-02 19:09:30
【问题描述】:

我在控制器中保存 HABTM 数据时遇到问题。

我有一个Article 模型,它与Event 模型相关联,因为文章可能与我的应用程序中的特定事件有关。我已经阅读了 saving HABTM data 上的 CakePHP 食谱条目,因此了解它在控制器级别的工作原理,但很难理解它在视图方面的外观。

我在表单中输入的是文章数据(标题、摘录、内容等)。然后,我想要数据库中每个事件的复选框,然后我可以检查以将文章与相应的事件相关联。

通常,我会有一个这样的复选框:

<input type="checkbox" name="event[]" value="1" />

1 是场地的 ID,在我的数据库中为每个事件做一个这样的复选框,但这在 CakePHP 中似乎不起作用。

使用$this-&gt;Form-&gt;input() 创建复选框时,我的字段名称应该填什么?什么是“CakePHP”方式?

【问题讨论】:

  • 您能对您的表格更具体一点吗?也许你应该提供你的表单视图。
  • 我的数据库中有一个包含所有事件的数组。我想为每个事件生成一个复选框,以便在提交表单时保存 HABTM 关系,但我不知道 CakePHP 期望在我的 $this-&gt;Form-&gt;input() 调用中为字段名称输入什么格式。

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


【解决方案1】:

假设您已按照Cook Book 中的说明在控制器中设置事件:

$this->set('events', $this->Event->find('list'));

那么你的输入应该是这样的,基本上就像 Cook Book 中的例子,加上 multiple option 的值是 checkbox

$this->Form->input('Event', array('multiple' => 'checkbox'));

这应该为您提供格式正确的复选框列表,其中事件displayField 作为标签。

你的下一个问题可能是验证,所以也看看CakePHP HABTM data not saving to database

【讨论】:

  • 谢谢。这解决了它。原来我需要在我的&lt;input&gt; 上将name 属性设置为data[Event][Event][]
【解决方案2】:

我想您是从ArticlesController::add() 保存数据的。

所以你的观点,你应该有类似下面的东西

add.ctp

<?php
echo $this->Form->create('Article');
echo $this->Form->input('Article.title', array('type' => 'text'));
echo $this->Form->input('Article.excerpt', array('type' => 'textarea'));
echo $this->Form->input('Article.title', array('type' => 'textarea'));

/** Generate multiple checkboxes, assumung that your array of events is $events **/
foreach($events as $index => $evt) {
    echo $this->Form->input('Event'.$index.'.id', array('type' => 'checkbox', 'value' => $evt['Event']['id']));
}
echo $this->Form->submit('save');
?>

foreach 循环将创建一组如下所示的复选框

<input type="checkbox" name="data[Event][0][id] value="1">
<input type="checkbox" name="data[Event][1][id] value="2">
<input type="checkbox" name="data[Event][2][id] value="3">
...

可以通过$this-&gt;request-&gt;data['Event'] 数组访问发送到控制器的相关数据。如果您已正确设置关系,则数据保存 已自动为您完成。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 2013-09-24
    • 1970-01-01
    • 2012-08-08
    • 2010-12-18
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多