4

埋め込まれた 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'
        )
    );

renderPartial は次のようになります。

        $this->renderPartial('_deleteSaved', array('savedLink'=>$s));

投稿したいものは正しく投稿されていますが、コントローラーと通信してデータを渡しているのか、データベースからデータを削除するコードが正しいのかわかりません。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

1

問題はarray_slice部品にあります。PHP ドキュメントで指定されているように、配列スライスは配列パラメーターを変更しません。

代わりに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

于 2013-10-11T07:08:12.060 に答える