Laravel插入未保存created_at,updated_at列

时间:2018-06-01 12:45:39

标签: laravel eloquent

我有日历模型。我不会插入海量数据。

$data = [
   [
       'weekday' => 1,
       'status'  => 'active'
   ]
   .......
];
$calendar->insert($data)

但在db created_at中,且updated_at为null为什么??;

4 个答案:

答案 0 :(得分:2)

如果INSIST使用insert并自动更新时间戳,Laravel不提供此功能。

您需要从代码端手动执行此操作。 有人在某些答案中提到:

'created_at' => $calendar->freshTimestamp(),
'updated_at' => $calendar->freshTimestamp()

我在一个项目中遇到了类似的问题,所以我想插入,但每次插入时都不会在代码中添加时间戳。 如果您需要使用插入而不手动添加时间戳。您可以更改迁移文件并添加时间戳手动:

$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP'));

现在数据库将处理在插入时创建的和更新的内容。

created_at将等于updated_at并等于当前时间戳

然后在save()上laravel将处理更新updated_at

答案 1 :(得分:1)

一个解决方案就是这个

$data = [
   [
       'weekday' => 1,
       'status'  => 'active',
       'created_at' => $calendar->freshTimestamp(),
       'updated_at' => $calendar->freshTimestamp()
   ]
   .......
];
$calendar->insert($data)

2解决方案在Model

/**
 *
 */
public static function boot()
{
    parent::boot();
    static::creating(function ($model) {
        $model->created_at = $model->freshTimestamp();
        $model->updated_at = $model->freshTimestamp();
    });
}

答案 2 :(得分:0)

由于您正在插入数据,因此只有在您使用->save()时才会自动填写created_at和updated_at。

确保已将这些字段添加到protected $fillable = [];数组中。

您还可以使用$calendar->update($data)

$calendar->fill($data);
$calendar->save();

希望我理解你的问题。

答案 3 :(得分:0)

Eloquent希望您的表格中存在created_at和updated_at列。

如果您希望Eloquent自动管理这些列,请将模型上的$ timestamps属性设置为true,并将列名称添加到protected $ fillable = [];阵列。

      var data = ["item":nil ,"item1":"","item3":nil ]

        print(data.allKeysWithOutValue()) // ptint ["item3","item"]

        print(data.allKeysWithValue()) // ptint ["item1"]

        print(data.valueIsNullForKey("item")) // print false

        print(data.valueIsNullForKey("item1"))  // print true

        data.updateNullValueWithValue("----")
        print(data) 
// print ["item3": Optional("----"), "item": Optional("----"), "item1":Optional("")]