如何使用Query Builder将值插入created_at字段

时间:2017-12-29 09:21:39

标签: php laravel laravel-5

我是Laravel的新手。我正在寻找一种方法,只要将行插入数据库表,就会自动将值插入特定字段,例如created_at

我发现只有Eloquent使用some Model->save()的方式会将时间戳插入所需的字段。

但是我希望即使在使用QueryBuilder时也能插入一个值。有没有办法这样做?

我看过这篇文章:Query builder not inserting timestamps

任何建议都将受到赞赏。

提前谢谢

2 个答案:

答案 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日期并进行更新