当前位置: 首页 > 知识库问答 >
问题:

如何使用查询生成器在字段中插入值

范文昌
2023-03-14

我是新来的Laravel。我正在寻找一种方法来插入一个值到特定的字段,如created_at自动每当行插入到DB表。

我发现只有雄辩的方式使用一些Model-

但我希望即使在使用QueryBuilder时也能插入一个值。有什么办法吗?

我看过这篇文章:查询生成器不插入时间戳

如有任何建议,将不胜感激。

提前谢谢你


共有2个答案

太叔鸿博
2023-03-14

可以在helpers中创建新的helper方法。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日期并进行更新

齐才艺
2023-03-14

您之前已经说过要使用Model::插入GetId(),但问题是这个方法没有使用Eloquent。这是一个查询生成器方法。所以,用create()代替:

$object = Model::create($data);
$id = $object->id;

如果仍要使用insertGetId(),则需要手动添加created\u处的时间戳:

$data['created_at'] = now();
Model::insertGetId($data);

或者您可以将CURRENT\u TIMESTAMP设置为TIMESTAMP列的默认值,但最好使用Elount来处理这个问题。

 类似资料:
  • 我正在使用Query builder插入数据所有字段都已插入,但像created_at和updated_at这样的时间戳没有插入,它们都具有默认的0:0:0值

  • 我们正在开发一个应用程序,我们将在运行时生成表单。现在我们需要对动态表单的数据执行CRUD操作。 我们想通过写入将记录保存到表中 javaSpring引导提供查询生成器像php CodeIgniter查询生成器 我正在尝试使用JOOQ来实现同样的目标。 上述代码的问题在于: 两个列表列和值的顺序应相同,并且 值中的数据类型应与代码中的表列数据类型匹配 注意:我们不能在代码生成中使用JOOQ,因为所

  • 数据库中有三个表 用户 地点 location_user(列:user_id,location_id) 我正在从用户注册表的多个下拉字段中的位置表中获取记录。填写表单时,用户必须从下拉列表中选择值,然后提交。 提交表单后,我想将数据插入用户表。同时,我还想把用户表中的id插入location_useruser_id列中,把用户注册表下拉列表中的位置选择值插入location_user表locati

  • 我有这个生成动态字段的示例代码。 我的问题是我不知道如何将数据插入数据库。 我尝试过内爆,但结果不是我想要的格式。 这是我的专栏(id、姓名、糖果、水果、饮料) 所以如果我生成3行,它应该像这样插入 事实上,我不知道这是否可能。谢啦 小提琴 https://jsfiddle.net/jqj1h4vb/2/

  • 问题内容: 当我尝试使用此查询时,我收到一条错误消息,指出Perameter电子邮件不存在,我确定变量:email,login_pass,payment_method,operateur是有效的并且存在。 我尝试删除引号,但我得到了 您的Sql语法有错误,请在第1行的’:email,:login_pass,:payment_method,:avecpuce)’附近查看与您的SQL Server对应

  • 我在这里尝试使用光标,我想知道如何访问选择列中的光标字段? 我有一个如下的实现, 我想明白,这个实现有什么问题。 谢谢你。