Cakephp 在cake中用一个表单编辑多行
在我的cake应用程序中,我有一个名为faqs的模型、名为faqs\U控制器的控制器和名为faqsindex.php的视图 我正在制作一个CMS,这样用户可以更改常见问题。db表“FAQ”有5列id、类别、问题、答案和编号。“编号”是常见问题解答的出现顺序 列出所有常见问题的循环大致如下所示:Cakephp 在cake中用一个表单编辑多行,cakephp,Cakephp,在我的cake应用程序中,我有一个名为faqs的模型、名为faqs\U控制器的控制器和名为faqsindex.php的视图 我正在制作一个CMS,这样用户可以更改常见问题。db表“FAQ”有5列id、类别、问题、答案和编号。“编号”是常见问题解答的出现顺序 列出所有常见问题的循环大致如下所示: <?php foreach ($faqs as $faq): <tr> <td><?php echo $faq['Faq']['category']; ?><
<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
function edit() {
if(!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq']);
}
else {
$this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
}
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->input('Faq.'.$key.'.number');
}
在索引视图中,我制作了一个foreach,如下所示:
<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
function edit() {
if(!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq']);
}
else {
$this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
}
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question'];
echo$form->input('Faq.'.$key.'.number');
}
在本例中,foreach循环8次,因为共有8行。如果我提交它们,我将创建8个新行&无法更新现有行
-编辑-
我在这里更改了echo的格式:
echo$form->input('Faq.'.$key.'.question',数组('value'=>$value['Faq']['question'])
预先填充表格。我不知道如何更新正确的行。如果我提交表单,我会收到8个mysql查询,如下所示:
<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
function edit() {
if(!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq']);
}
else {
$this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
}
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->input('Faq.'.$key.'.number');
}
当我不想插入而只想更新时,插入到FAQ
(question
)值(“我刚才添加的新问题?”)中。如果您使用jquery:所有排序都在客户端完成,您可以将订单值放入隐藏输入,并使用javascript根据用户交互来更改它们。服务器端脚本没有任何可更改的内容
编辑:
除非保存后将它们重定向到其他地方。如果使用jquery:所有排序都在客户端完成,则将订单值放入隐藏输入中,并使用javascript根据用户交互对其进行更改。服务器端脚本没有任何可更改的内容
编辑:
除非在保存后将它们重定向到其他地方。如果要使用Cake更新特定行,只需在
saveAll()
查询中设置适当的行ID即可
function edit() {
if (!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq'], array('conditions' => array('Faq.id' => $yourId)));
}
...
}
这告诉Cake的ORM只在Faq.id
等于$yourId
的位置将信息保存到行中。如果$yourId
与表中的现有ID匹配,则应更新该行
编辑
您可以将id
字段放入一个列表中
如果您想用Cake更新特定行,只需在
saveAll()
查询中设置适当的行ID即可
function edit() {
if (!empty($this->data)) {
$this->Faq->saveAll($this->data['Faq'], array('conditions' => array('Faq.id' => $yourId)));
}
...
}
这告诉Cake的ORM只在Faq.id
等于$yourId
的位置将信息保存到行中。如果$yourId
与表中的现有ID匹配,则应更新该行
编辑
您可以将id
字段放入一个列表中
将每个常见问题id放入表单中
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->hidden('Faq.'.$key.'.id', array('value' => $value['Faq']['id']));
echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question'];
echo$form->hidden('Faq.'.$key.'.id',数组('value'=>$value['Faq']['id']);
echo$form->input('Faq.'.$key.'.number');
}
是否将每个常见问题id放入表单中
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
echo 'id:'.$value['Faq']['id'];
echo '<br/>question:'.$value['Faq']['question'];
echo $form->hidden('Faq.'.$key.'.id', array('value' => $value['Faq']['id']));
echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question'];
echo$form->hidden('Faq.'.$key.'.id',数组('value'=>$value['Faq']['id']);
echo$form->input('Faq.'.$key.'.number');
}
创建一个表单,在控制器中检索与已提交表单字段关联的FAQ对象,更新其编号属性,然后再次保存FAQ对象。还有其他方法吗?我不太清楚我要做什么,我正在尝试找出如何进行更新。创建一个表单,在控制器中检索与提交表单字段关联的FAQ对象,更新其编号属性,然后再次保存FAQ对象。还有别的办法吗?我不太清楚我想做什么,我想知道如何更新。但是$yourId是从哪里来的?我很抱歉,如果我在这里显得头昏眼花的话,我只是很难理解这件事。我希望foreach中的8个表单字段都有一个与“Faq.id”匹配的id。我还希望表单中预先填充已有的内容。@pg您必须提供这些内容。假设您在更新记录时已收集了相应的id。如果尚未收集,则应能够将id
字段添加到数据库查询中,以便使用正在编辑的数据库记录填充表单输入。然后只需将该ID包含在隐藏的表单输入中。如果设置正确,相应的id
将在$this->data['Faq']['id']
中传输。好的,这就是我的问题。如何将$yourId包含到隐藏表单输入中?输入应该是输入(“Faq.”.$value['Faq']['id']'''..number')?谢谢你的帮助,我能够通过组合所有三个答案来计算出来。但是$yourId来自哪里?我很抱歉,如果我在这里显得头昏眼花的话,我只是很难理解这件事。我希望foreach中的8个表单字段都有一个与“Faq.id”匹配的id。我还希望表单中预先填充已有的内容。@pg您必须提供这些内容。假设您在更新记录时已收集了相应的id。如果尚未收集,则应能够将id
字段添加到数据库查询中,以便使用正在编辑的数据库记录填充表单输入。然后只需将该ID包含在隐藏的表单输入中。如果设置正确,相应的id
将在$this->data['Faq']['id']
中传输。好的,这就是我的问题。我如何将$yourId包含在隐藏中