通常,Laravel 平台有一个$table->timestamps();
in migration...,它生成两个datetime
字段,但我想实现我自己的时间戳,或者,也许调用unix_timestamps()
. 我想要两个名为created_at
, 和的字段updated_at
,它们存储 unix 时间戳,我该如何实现它?谢谢。
问问题
13927 次
5 回答
7
你不必使用 Laravel 的时间戳助手,但它们很方便。现在也有一些处理字符串时间戳的好方法,包括 PHP 的DateTime类。但我离题了,使用unix时间戳......
在您的架构(迁移)中,使用
$table->integer('created_at'); $table->integer('updated_at');
代替
$table->timestamps();
替换
timestamp()
模型中的函数。- 保留
$timestamps = true
在您的模型中。
这是一个示例基本模型,您可以使用它并在您的模型上扩展而不是 Eloquent:
// models/basemodel.php
class BaseModel extends Eloquent {
/**
* Indicates if the model has update and creation timestamps.
*
* @var bool
*/
public static $timestamps = true;
/**
* Set the update and creation timestamps on the model.
*/
public function timestamp()
{
$this->updated_at = time();
if ( ! $this->exists) $this->created_at = $this->updated_at;
}
}
// models/thing.php
class Thing extends BaseModel {
}
于 2013-04-12T14:29:47.153 回答
4
对于 Laravel 4:
- 覆盖 Eloquent 模型中的 freshTimestamp() 方法
- 在迁移文件中使用整数而不是时间戳
模型/product.php
class Product extends Eloquent {
protected $table = 'products';
public function freshTimestamp()
{
return time();
}
}
Laravel 4 还将所有日期/时间戳更改为 Carbon 实例(在此处记录)
这意味着您还需要覆盖该getDates()
方法,以防止 Carbon 在插入之前破坏您的时间戳。
public function getDates()
{
return array();
}
数据库/迁移/2013_04_20_125823_create_products_table.php:
public function up()
{
Schema::create('products', function(Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('created_at');
$table->integer('updated_at');
});
}
于 2013-05-03T08:26:58.617 回答
2
我有同样的要求,并想出了一个可能也适合你的解决方案。我在 Github 上发布了一个关于我是如何做到的回购:Laravel Integer SQL Dates <== 查看它以获取更多详细信息,但这里是它的要点:
class Base extends Eloquent {
public function freshTimestamp()
{
return time(); // (int) instead of '2000-00-00 00:00:00'
}
public function fromDateTime($value)
{
return $value; // Don't mutate our (int) on INSERT!
}
// Uncomment, if you don't want Carbon API on SELECTs
// protected function asDateTime($value)
// {
// return $value;
// }
public function getDateFormat()
{
return 'U'; // PHP date() Seconds since the Unix Epoch
}
}
class User extends Base {
protected $table = 'users';
protected $fillable = ['email'];
}
于 2014-05-18T23:12:54.643 回答
1
只需创建一个时间戳类型的迁移/模型字段,然后在您的控制器中,使用当前时间填充它
$myField = new \DateTime();
于 2017-04-12T11:44:13.470 回答