Неверная дата отправки в базу данных

#php #date #logging #model-view-controller #cakephp

Вопрос:

Я унаследовал проект CakePHP 3, обрабатывающий некоторые показания в определенные даты. У нас есть API, подключенный к телефонному приложению, которое снимает показания скважины и вставляет их в базу данных.

Показания, а также созданные и обновленные метками времени, работают правильно, но в этом унаследованном проекте у них есть отдельный столбец даты «дата чтения», который дает мне 0015-10-05. Другие аспекты контроллера API работают нормально, но это по-прежнему вызывает у меня проблемы. У меня есть код для метода add() ниже

  /**
   * Add method
   *
   * @return CakeHttpResponse|null Redirects on successful add, renders view otherwise.
   */
  public function add()
  {
    $wellReading = $this->WellReadings->newEntity();
    if ($this->request->is('post')) {
      $data = $this->request->getData();
      $this->log($this->request->getAttribute('params'));
      $this->ats_log($this->request->getAttribute('params'));
      $data['reading_date'] = date('Y-m-d', strtotime('Today'));
      $data['reading_time'] = date('G:i:s');
      $wellReading = $this->WellReadings->newEntity($wellReading, $data);

      if ($this->WellReadings->save($wellReading)) {
        // we're going to add some related info in here so we can return it with the inserted record in the API
        $operator = $this->WellReadings->Operators->findById($wellReading->operator_id)->first();
        $well = $this->WellReadings->Wells->findById($wellReading->well_id)->first();
        $wellReading->reading_date = date('Y-m-d');
        $wellReading->operator = $operator->name;
        $wellReading->well = $well->identifier;
        $wellReading->region_id = $well->region_id;

        $this->set(['success' => true, 'data' => $wellReading, '_serialize' => ['success', 'data']]);
      } else {
        $this->set(['success' => false, 'errors' => $wellReading->errors(), '_serialize' => ['success', 'errors']]);
      }
    }
  }
 

Я удалил UseLocaleParser из bootstrap.php как я читал, он вызывает проблемы в более старых версиях CakePHP.

Кроме того, $this->log() ничего мне не дает, что бы я ни пытался. Я пытался использовать переменную данных и множество различных итераций $this->запрос ->>, Параметры, атрибут, getData, ничего не будет отображаться в моих журналах ошибок.

Метод ats_log должен принимать $данные и записывать все, что находится в этой переменной, в отдельный файл журнала, у нас была эта идея, когда в функции журнала Cake ничего не появилось, но все в этом файле равно НУЛЮ. Тем не менее, показания отображаются в базе данных, и только столбец reading_date неверен.

Мы будем очень признательны за любую помощь.

ПРАВКА: Мой ведущий разработчик сообщил мне, что мы должны включить локальный анализатор.

Комментарии:

1. Это реальный производственный код, или вы просто что-то тестируете? Более конкретно, вы действительно намерены «жестко закодировать» дату и время таким образом, или, возможно, предполагается, что они будут отправлены с интерфейса?

2. Это производственный код, который я унаследовал. На данный момент я просто добавил журналы, чтобы посмотреть, что на самом деле поступает, но ничего не получаю. Дата считывания должна исходить с переднего конца, а затем мы жестко закодируем ее в столбце дата считывания. Я очень новичок в CakePHP, поэтому не уверен в другом способе.

Ответ №1:

Таким образом, этот код не показал всей картины после дальнейшей работы над проектом.

Мой старший разработчик уже изменил предыдущий код с

 $data['reading_date'] = date('d/m/Y', strtotime('Today'));
 

к тому, что у меня есть выше. Это привело к тому, что валидатор в таблице Wellreading выдал ошибку. В валидаторе принятым форматом был «mdY». Я не уверен, почему кто-то допустил недопустимый формат даты в базе данных, но после переключения его на » Ymd » данные вводятся правильно.

Вторая часть, вместо использования $this->log(); для сбора данных, я смог использовать debug(); чтобы данные отображались в отдельном журнале в файловой структуре.