我有日历模型。我不会插入海量数据。
$data = [
[
'weekday' => 1,
'status' => 'active'
]
.......
];
$calendar->insert($data)
但在db created_at中,且updated_at为null为什么??;
答案 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("")]