yii2 mongodb - добавить комментарии к существующему полю, как - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть коллекция, называемая work-monitor, в которой у меня есть два поля, а именно assignor_remarks и assignee_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}

1 Ответ

1 голос
/ 28 апреля 2020

Попробуйте что-нибудь подобное, если я вас правильно понял.

// 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';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...