Как на самом деле работает дата-формат laravel / lumen 'U'? - PullRequest
0 голосов
/ 05 сентября 2018

Я не могу получить временные метки с форматом даты 'U', работающим в люменах.

В миграции:

        $table->timestamps();

В модели:

protected $dateFormat = 'U';

protected $dates = [
    'created_at',
    'updated_at',
    'deleted_at'
];

public function getDateFormat()
{
    return 'U';
}

Вставить строку из контроллера:

    $model = new ApiKey;
    $model->random= rand();
    $model->name = $name;
    $model->scope = $scope;
    $model->save();

Он вставляет строку в базу данных, но со значениями 0000-00-00 00: 00: 00 для столбцов созданных и обновленных.

Кроме того, при получении модели через toArray или toJson выдается исключение:

enter image description here

Я хочу, чтобы lumen автоматически обновлял метки времени и получал метки времени в формате unixtimestamp , т.е. количество секунд с 1 января 1970 года.

Кроме того, $table->timestamps() не создавал столбец dele_at. Что мне нужно сделать, чтобы создать этот столбец с помощью laravel.

Есть ли другой вариант, кроме $table->timestamp('deleted_at');?

Я нашел отсек решения, изменяющий столбцы меток времени на int. Но я хочу, чтобы все было сделано лауреатским путем.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вероятно, это связано с тем, что Laravel / Lumen создал столбцы даты / времени как тип timestamp, а не int, поэтому вы пытаетесь сохранить в поле неправильный тип данных, вызывая 0000-00-00 00:00:00 .

Это также может привести к проблеме с углеродом, поскольку вы пытаетесь createFromFormat использовать неправильный формат по сравнению с содержимым.

Вы можете использовать $table->integer('deleted_at'); в своей миграции для создания столбца deleted_at.

TL; DR:

Вручную создайте столбцы даты и времени с помощью $table->integer('updated_at').

0 голосов
/ 05 сентября 2018

Временные метки Unix являются целыми числами, несовместимыми с полями SQL datetime / timestamp. Если вы хотите использовать метки времени Unix, используйте целочисленные типы полей для хранения.

Метод timestamps () создает только create_at и updated_at, мягкое удаление по умолчанию не включено. Этот метод не следует использовать, если вам нужно целочисленное хранилище.


Если вы хотите изменить формат вывода только при сериализации данных, используйте приведение: `

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'created_at' => 'datetime:U',
];
...