yii2 mongodb-如何在现有字段中添加注释

问题描述 投票:0回答:1

我有一个名为work-monitor的集合,其中我有两个字段,即assignor_remarksassignee_remarks

因此,当转让人或受让人提交评论时,我想将这些评论添加到相应的评论字段中。我可以将评论保存在集合中,但是新评论将覆盖现有评论。

我的代码是这样的:

public function actionWorkUpdate($id)
      {
        \Yii::$app->request->enableCsrfValidation = false;
        $work = $this->modelClass::find()->where(['_id'=>$id])->one();

        $work->load(Yii::$app->getRequest()->getBodyParams(), '');

        $work->assignee_remarks = ["timestamp"=>date('d-m-Y h:i'),"comments"=>$work->assignee_remarks];
    $work->update();
    return "success";
  }

我如何实现这一目标。

更新如下例所示:

"assignee_remarks":{"comment":"test comment","commentTime":2020-04-29 12.41},
{"comment":"test comment2","commentTime":2020-04-29 12.45},
{"comment":"test comment3","commentTime":2020-04-29 12.50}
php mongodb yii2
1个回答
1
投票

如果我对您的理解正确,请尝试类似的方法。

// In Work Model

public $assignee_remarks;

public function rules()
{
    return [
        //...
        ['assignee_remarks', 'safe'] // for free load
    ];
}

// In controller

/**
 * In bodyParams you have new comment like assignee_remarks: 'some text'
 * @param $id
 * @return mixed
 */
public function actionWorkUpdate($id)
{
    \Yii::$app->request->enableCsrfValidation = false;
    $work = $this->modelClass::find()->where(['_id' => $id])->one();

    $currentComments = $work->assignee_remarks ?? [];
    $work->load(Yii::$app->getRequest()->getBodyParams(), '');

    $currentComments[] = ["commentTime" => date('d-m-Y h:i'), "comment" => $work->assignee_remarks];
    $work->assignee_remarks = $currentComments;

    $result = $work->update();

    if ($result === false) {
        // validation error
    } else {
        return $result > 0 ? 'success' : 'fail';
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.