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

问题描述 投票:2回答:2

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

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

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

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

任何意见,将不胜感激。

先感谢您

php laravel laravel-5
2个回答
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
投票

您可以在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日期并进行更新

© www.soinside.com 2019 - 2024. All rights reserved.