我希望每次点击包含联系人ID的链接时,在contact_status_id
字段中的联系人表格中切换状态编号。页面显示没有错误,但操作不会更改数字。尚未实施验证。
也许一双新眼睛可以发现问题?
function inbox_toggle_number_status($id=null)
{
//Call from the inbox when the number is clicked and status toggled.
$this->User->Contact->id = $id;
if (!empty($id))
{
$current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id)));
if ($current_status['Contact']['contact_status_id'] == '1'):
$this->User->Contact->saveField('contact_status_id', '2');
exit();
elseif ($current_status['Contact']['contact_status_id'] == '2'):
$this->User->Contact->saveField('contact_status_id', '3');
exit();
elseif ($current_status['Contact']['contact_status_id'] == '3'):
$this->User->Contact->saveField('contact_status_id', '2');
exit();
else:
exit();
endif;
}
}
答案 0 :(得分:1)
function inbox_toggle_number_status( $id = null )
{
if( !$id )
{
$this->Session->setFlash( 'no id' );
$this->redirect( array( 'action' => 'index' ) );
}
$this->User->Contact->id = $id;
$current_status = $this->User->Contact->read( null, $id );
switch( $current_status['Contact']['contact_status_id'] )
{
case 1:
$this->User->Contact->saveField( 'contact_status_id', 2 );
break;
case 2:
$this->User->Contact->saveField( 'contact_status_id', 3 );
break;
case 3:
//should yu not go back to 1?
$this->User->Contact->saveField( 'contact_status_id', 2 );
break;
} // switch
}
答案 1 :(得分:0)
我从未对蛋糕中的一些保存方法好运。出于这个原因,我几乎总是使用Model :: save(array()),数组包含要更新的id和字段。如果你想走这条路,你可以这样做:
if(!empty($id)) {
$arr = array( 'Contact' => array( 'id' => $id ) );
$current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id)));
if ($current_status['Contact']['contact_status_id'] == '1'):
$arr['Contact']['contact_status_id'] = 2;
<other conditional clauses here>
$this->User->Contact->save($arr);
exit();
}
如果您想继续使用您的路由,请将您的调试级别2设置为,并告诉我们脚本是否正在尝试将值保存到db中(在页面底部提供SQL转储)。
答案 2 :(得分:0)
我有个主意;看到这一行?
$this->User->Contact->id = $id;
此ID设置可能仅适用于设置后执行的第一个查询,
所以
您可能必须在包含saveField调用的if语句之前再次设置它。
但是,在find(...)调用之前你并不需要它,因为你将$ id设置为find(...)'conditions'数组的一部分。
<强>解决方案强>
尝试将$ this-&gt; User-&gt; Contact-&gt; id = $ id移到find(...)之后的行,因此将为即将到来的setField(...)调用设置它。
同时强>
而不是使用!empty(...),尝试使用
开始函数if(!isset($id)){
$this->redirect(/*some url with an error message*/ );
}
后跟在$ id有效时执行的代码