我有一些代码应该从嵌入的MongoDB文档中删除记录。
这是代码:
public function actionDeleteSaved()
{
$savedLink = $_POST['savedLink'];
$userId = Yii::app()->user->getId();
$current = SaveLink::model()->findByPk($userId);
if(in_array($savedLink, $current->links))
{
array_slice($current->links, $savedLink);
$current->save();
}
}
这就是将数据传递到控制器操作方法的原因:
echo CHtml::ajaxButton(
'delete',
Yii::app()->createUrl("dashboard/index/deletesaved"),
array( // ajax options
'type' => 'POST',
'context' => "js:this",
'data' => array(
'savedLink' => $savedLink
)
),
array( //html options
'class'=>'deleteSaved'
)
);
这就是渲染部分的样子:
$this->renderPartial('_deleteSaved', array('savedLink'=>$s));
我想要发布的内容被正确发布,但我不确定它是否与控制器通信并通过传递数据,或者我用于从数据库中删除数据的代码是否正确。
任何帮助将不胜感激,谢谢。
问题出在array_slice
部分。如 php docs 数组切片中指定的那样,不会修改数组参数。
改用array_splice(它修改传递的数组参数(并array_search获取密钥:
if(in_array($savedLink, $current->links))
{
$key = array_search($savedLink, $current->links);
array_splice($current->links, $key, 0);
$current->save();
}
注意:如果$current->links
是嵌入的文档(对象(数组,则可能需要找到$key
并检查是否以其他方式在数组中。