在CakePHP中保存HABTM数据的问题

时间:2013-09-02 10:44:45

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为您保存的数据来自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->request->data['Event']阵列访问发送到控制器的受尊重数据。如果您已设置关系correclty,则保存数据 已自动为您完成。

我希望这会有所帮助。