我是Laravel的新手。我正在寻找一种方法,只要将行插入数据库表,就会自动将值插入特定字段,例如created_at
。
我发现只有Eloquent
使用some Model->save()
的方式会将时间戳插入所需的字段。
但是我希望即使在使用QueryBuilder时也能插入一个值。有没有办法这样做?
我看过这篇文章:Query builder not inserting timestamps
任何建议都将受到赞赏。
提前谢谢
答案 0 :(得分:1)
你said before你正在使用Model::insertGetId()
,但问题是这个方法没有使用Eloquent。这是一个Query Builder方法。因此,请改用create()
:
$object = Model::create($data);
$id = $object->id;
如果您仍想使用insertGetId()
,则需要手动添加created_at
时间戳:
$data['created_at'] = now();
Model::insertGetId($data);
或者您可以将CURRENT_TIMESTAMP
设置为timestamp列的默认值,但使用Eloquent处理此问题会好得多。
答案 1 :(得分:-1)
您可以在helpers.php中创建一个新的辅助方法 像这样:
public function queryBuilderInsert($table, $data, $deleted_at = false)
{
$data['created_at'] = \Carbon::now();
$data['updated_at'] = \Carbon::now();
$deleted_at ? $data['deleted_at'] = null :;
\DB::table($table)->insert($data);
}
public function queryBuilderUpdate($builder, $data)
{
$data['updated_at'] = \Carbon::now();
$builder->update($data);
}
然后你可以像这样构建你的查询:
insert
使用queryBuilderInsert
方法
$example_data = [
'name' => 'Name',
'email'=> 'Email'
];
queryBuilderInsert('users',$example_data);
如果您在桌面上使用软删除,则可以使用queryBuilderInsert
的第三个参数
queryBuilderInsert('users',$example_data, true);
对于update
,您可以进行查询,然后调用queryBuilderUpdate
方法
$example_update_data = [
'name' => 'Name',
'email'=> 'Email'
];
$builder = \DB::table('users')->where('id',1);
queryBuilderUpdate($builder,$example_update_data);
它会设置updated_at
日期并进行更新