текущая метка времени laravel при миграции с углеродом

#laravel #timestamp #migration #php-carbon

Вопрос:

Я хочу отобразить created_at в виде метки времени, как это :

created_at : 1625501162

итак, это мой столбец created_at в миграции:

$table->string('created_at')->Carbon::now()->timestamp;

Теперь я хочу, чтобы это поле создавалось автоматически при создании новой записи и записи текущего времени. поэтому, когда я изменю строку на эту :

$table->string('created_at')->useCurrent(Carbon::now()->timestamp);

выдает мне эту ошибку :

Method call is provided 1 parameters, but the method signature uses 0 parameters

итак, как я могу решить эту проблему?

Какие еще способы вы предлагаете для метки времени created_at и автоматического ее сохранения?

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

1. по умолчанию created_at столбец автоматически заполняется моделью с текущей меткой времени, поэтому вам не нужно этого делать

Ответ №1:

Вместо строки, которую вы можете использовать timestamp() при миграции.

 $table->timestamp('created_at')->useCurrent();
 

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

 class Something extends Model {
    protected $cast = [
        'created_at' => 'timestamp'
    ];
}
 

Ответ №2:

Если вы хотите, чтобы в вашем столбце была метка времени, которую вы должны использовать timestamp() вместо string() . useCurrent() не принимает параметр. Изменить

 $table->string('created_at')->useCurrent(Carbon::now()->timestamp);
 

Для

 $table->timestamp('created_at')->useCurrent();
 

https://laravel.com/docs/8.x/migrations#column-method-timestamp

https://laravel.com/docs/8.x/migrations#column-modifiers

Изменить: чтобы всегда получать метку времени вместо даты, которую вы можете использовать

 protected $casts = ['created_at' => 'timestamp'];
 

в твоей Модели.

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

1. но этот код возвращает следующее : 2021-07-29 14:07:29 я хочу, чтобы created_at выглядел так : 1627552004

2. Возвращается куда? Что хранится в вашей базе данных? Скорее всего, он возвращает дату, потому created_at что используется как дата. Вы можете привести к метке времени, используя protected $casts = ['created_at' => 'timestamp']; ее в своем контроллере. Посмотрим, сработает ли это

Ответ №3:

Более простой способ-настроить формат даты модели

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Flight extends Model
{
    /**
     * The storage format of the model's date columns.
     *
     * @var string
     */
    protected $dateFormat = 'U';
}
 

Нет необходимости указывать значение по умолчанию при переносе. каждый раз, когда created_at, updated_at и deleted_at(если вы используете мягкое удаление) должны обновляться/заполняться, они будут в формате метки времени unix

Миграция должна быть целым числом

 $table->integer('created_at')->nullable(); //you can omit this nullable
$table->integer('updated_at')->nullable(); //you can omit this nullable

// if you use softDelete trait
$table->integer('deleted_at')->nullable();
 

Ответ №4:

Это пример столбца, созданного в. При создании новой записи по умолчанию используется дата в формате UNIX.

 $table->integer('createdAt')->default(DB::raw('extract(epoch from now())'));