如何使用查询生成器向 created_at 字段插入值
Posted
技术标签:
【中文标题】如何使用查询生成器向 created_at 字段插入值【英文标题】:How to insert a value to created_at field using Query Builder 【发布时间】:2018-06-09 18:06:41 【问题描述】:我是 Laravel 的新手。我正在寻找一种在将行插入数据库表时自动向特定字段(例如 created_at
)插入值的方法。
我发现只有 Eloquent
使用 some Model->save()
的方式将时间戳插入到所需的字段。
但我希望即使在使用 QueryBuilder 时也能够插入值。有什么办法吗?
我看过这个帖子:Query builder not inserting timestamps
任何建议将不胜感激。
提前谢谢你
【问题讨论】:
你想达到什么目的? 为什么不在数据库中设置触发器呢? 【参考方案1】:你有said before 你正在使用Model::insertGetId()
,但问题是这个方法没有使用 Eloquent。这是一个查询生成器方法。所以,请改用create()
:
$object = Model::create($data);
$id = $object->id;
如果您仍想使用insertGetId()
,则需要手动添加created_at
时间戳:
$data['created_at'] = now();
Model::insertGetId($data);
或者您可以将CURRENT_TIMESTAMP
设置为时间戳列的默认值,但最好只使用 Eloquent 来处理。
【讨论】:
$data['created_at'] = now();【参考方案2】:你可以在 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
日期并进行更新
【讨论】:
以上是关于如何使用查询生成器向 created_at 字段插入值的主要内容,如果未能解决你的问题,请参考以下文章