#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())'));