覆盖created_at值

时间:2018-02-06 20:24:30

标签: php laravel date laravel-5 laravel-5.5

我试图将日期插入到创建时但没有工作

我尝试使用create as normal

$this->create([ 'product_id' => "$id", 'shop_name' => $shop,'created_at' => $date ]);

我尝试更改日期格式以匹配laravel

$date = date('Y-m-d H:i:s',strtotime($id['created_at']));

我还尝试使用mutators来每次更改值

public function setFirstNameAttribute($value)
{
    $this->attributes['created_at'] = $value;
}

如何在created_at而不是默认日期设置特定日期?

3 个答案:

答案 0 :(得分:1)

您是否为您的模型设置了可填充或保护的阵列?

如果是这样,create方法将跳过不可批量分配的字段。

如果你想填写自己的,你可以这样做:

$product = app(Product::class);
$product->timestamps = false; // disable timestamps for this creation

// set what you want to set
$product->product_id = $id;
$product->shop_name = $shop;
$product->created_at = $datetime; // <- datetime here
$product->save();

虽然,如果您查看代码(vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php),并且created_at字段是可填充的,则如果在创建期间设置了该字段,则不应设置其他值。 (参见那里的isDirty检查)

如果您不希望以正常方式使用created_at和updated_at,只需在模型中将timestamps设置为false:

public $timestamps = false;

答案 1 :(得分:0)

  

所以这就是示例 - 当调用save()方法时,我们可以指定要忽略的时间戳,而不是自动更新。像这样:

$product = Product::find($id);
$product->created_at = '2015-01-01 10:00:00';
$product->save(['timestamps' => false]);

参考:Laravel daily

答案 2 :(得分:0)

我认为您必须将模型中的时间戳设置为false

scan