Laravel: Как отформатировать как ISO8601 для приема и вывода для API, но хранить в формате MySQL? - PullRequest
2 голосов
/ 10 апреля 2020

Я бы хотел, чтобы мое приложение Laravel 6.x принимало и возвращало даты, соответствующие ISO8601, через свой API, продолжая сохранять их в формате базы данных MySQL по умолчанию, который равен Y-m-d H:i:s. Подвох в том, что ни при каких обстоятельствах я не буду устанавливать мутаторы / аксессоры для каждого свойства, связанного с датой, в моем приложении. Это то, для чего предназначен массив protected $dates, и это не будет наилучшей практикой, поскольку он сильно дублирует код.

Я смог убедиться, что приложение возвращает даты для клиент в формате ISO8601, переопределяя функцию serializeDate в Model.php следующим образом:

/**
 * Prepare a date for array/JSON serialization by casting it to an ISO8601-conforming string. This overrides the
 * Eloquent `Model` class definition for `serializeDate`.
 *
 * @param DateTimeInterface $date
 *
 * @return string - An ISO8601 string representing the date stored in the database.
 */
protected function serializeDate(DateTimeInterface $date)
{
    return Carbon::instance($date)->toIso8601String();
}

и предоставляя мои даты в виде строк в массиве Model.php $dates:

    /**
     * Attributes that should be mutated into dates.
     *
     * @var array
     */
    protected $dates = [
        'beganAt',
        'completedAt'
    ];

К сожалению, я все еще не могу отправить строки даты, совместимые с ISO8601, в приложение с клиента. Например, отправив:

{
   "someDate": "2020-04-10T06:47:43.356Z"
}

результаты с Laravel, более конкретно, Carbon, отвечая:

{
    "message": "Unexpected data found. Trailing data",
    "exception": "InvalidArgumentException",
    "file": "/var/www/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php",
    "line": 623
}

Я попытался установить свойство $dateFormat для Model.php к DATE_ATOM, c и DATE_ISO8601 безуспешно, я попытался переопределить метод getDateFormat(), и я даже попытался переопределить многие из методов в HasAttributes.php trait.

Итак, как я go об этом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...