在CakePHP中保存HABTM数据的问题

在CakePHP中保存HABTM数据的问题,cakephp,models,has-and-belongs-to-many,Cakephp,Models,Has And Belongs To Many,我在控制器中保存HABTM数据时遇到问题 我有一个文章模型,它与事件模型关联,因为文章可能是关于我的应用程序中的特定事件的。我已经阅读了上的CakePHP cookbook条目,因此理解了它在控制器级别上的工作方式,但在理解它在视图方面的外观时遇到了困难 我表格中的内容是文章数据的输入(标题、摘录、内容等)。然后,我需要数据库中每个事件的复选框,然后我可以选中将一篇文章与相应的事件关联起来 通常,我会有这样一个复选框: <input type="checkbox" name="event[

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

我有一个
文章
模型,它与
事件
模型关联,因为文章可能是关于我的应用程序中的特定事件的。我已经阅读了上的CakePHP cookbook条目,因此理解了它在控制器级别上的工作方式,但在理解它在视图方面的外观时遇到了困难

我表格中的内容是文章数据的输入(标题、摘录、内容等)。然后,我需要数据库中每个事件的复选框,然后我可以选中将一篇文章与相应的事件关联起来

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

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

其中,
1
是场馆的ID,在我的数据库中的每个活动都要做这样的复选框,但在CakePHP中似乎不起作用


使用
$this->Form->input()
创建复选框时,我应该为字段名添加什么内容?“CakePHP”的方式是什么?

我想您应该从
ArticlesController::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');
?>
发送到控制器的受尊重数据可以通过
$this->request->data['Event']
数组访问。如果已正确设置关系,则数据保存 是自动为您完成的


我希望这会有所帮助。

假设您已在控制器中设置事件,如中所述:

然后您的输入应该如下所示,基本上与烹饪书中的示例类似,添加了值为
的复选框

$this->Form->input('Event', array('multiple' => 'checkbox'));
这将为您提供一个格式正确的复选框列表,其中的事件
displayField
作为标签


您的下一个问题可能是验证,因此也请看一看

您能否更具体地描述一下您的表单?也许你应该提供表单视图。我的数据库中有一个包含所有事件的数组。我想为每个事件生成一个复选框,以便在提交表单时保存HABTM关系,但我不知道CakePHP希望在我的
$this->form->input()
call中为字段名设置什么格式。谢谢。这就解决了问题。原来我需要在我的
上将
名称
属性设置为
数据[Event][Event][]
$this->set('events', $this->Event->find('list'));
$this->Form->input('Event', array('multiple' => 'checkbox'));