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

使用查询生成器执行Laravel upsert操作

郭志
2023-03-14

在我的一个工作脚本中,根据一些指标存储聚合计数,我没有使用雄辩的查询有点复杂,使用查询生成器很容易编写。我目前正在从数据库获取值,我需要在数据库中插入/更新它。可以通过使用保存()方法可以使用查询生成器来实现uprett操作吗?或者我需要每次检查这个条目是否在数据库中?

我总共有100000个条目,希望将其作为日常作业运行。因此,如果我需要检查数据库中是否存在特定条目,我需要多次访问数据库。是否有其他解决方案?

我正在考虑创建两个模型类,一个使用Elount,另一个使用QueryBuilder。我可以在雄辩的模型中使用我的自定义查询吗?

共有3个答案

白宏义
2023-03-14

Eloquent有一个名为updateOrCreate的方法,可以像下面的示例一样使用:

<?
$flight = Flight::updateOrCreate(
    [
       'code' => '156787', 
       'destination' => 'COL'
    ],
    [
       'code' => '156787', 
       'destination' => 'COL',
       'price' => 99, 
       'discounted' => 1,
    ],
);
  1. 通过codedestination进行搜索可以最大限度地识别您的行
  2. 它根据第二个数组中给定的值创建或更新

以下是该方法的标志。

/**
 * Create or update a record matching the attributes, and fill it with values.
 *
 * @param  array  $attributes
 * @param  array  $values
 * @return \Illuminate\Database\Eloquent\Model
 */
public function updateOrCreate(array $attributes, array $values = [])
茹照
2023-03-14

现在(2020年10月6日),Laravel(v8.10.0)具有本机upsert支持。https://github.com/laravel/framework/pull/34698

DB::table('users')->upsert([
    ['id' => 1, 'email' => 'taylor@example.com'],
    ['id' => 2, 'email' => 'dayle@example.com'],
], 'email');
令狐弘益
2023-03-14

Eloquent具有updateOrCreate()方法,允许您完全按照自己的意愿进行操作。但查询生成器没有类似的方法。

您可以使用查询生成器生成原始查询并使用插入。。。在复制密钥更新为upsert解决方案时。

 类似资料:
  • 问题内容: 我有两个通过1:1关系连接的实体,例如: 我想创建一个Doctrine查询,在其中我可以根据中某个列的值检索数据。像这样的东西(当然不起作用): 任何帮助将非常感激 :) 问题答案: 左连接在这里也没有意义(因为where子句将使它像内部连接一样工作)

  • 问题内容: 然而,从上述线程中摘录的一个重要观点是: Querydsl和jOOQ似乎是最流行和最成熟的选择,但是需要注意的一件事: 两者都依赖于代码生成的概念, 即为数据库表和字段生成元类。这有助于建立一个漂亮,干净的DSL,但是 在尝试为仅在运行时才知道的数据库创建查询时会遇到问题 。 除了仅使用纯JDBC +字符串串联外,还有什么方法可以在运行时创建查询吗? 我正在寻找的是一个Web应用程序,

  • 我想不出如何使用TypeOrm查询生成器编写以下MySql语句 从farm.reg中选择reg.id,其中grpId=“abc”; 这个选择返回的只是ID的,但我的查询生成器返回的是整个对象。 现在,我在我的NestJs服务中有这个函数,但我需要使用'map',我不想… 谢谢

  • 我正在构建一个简单的元数据表,从查询中获取数据。我希望能够查询“type”变量的两个选项。然而| |不起作用;当我使用这个时,页面崩溃。

  • 我使用laravel雄辩到CRUD数据。我的问题是,我不知道如何使用laravel雄辩的ORM进行UNION查询。你能帮我解决我的问题吗 这是我想要在laravel雄辩或查询生成器中实现的示例查询

  • 要在spark sql中运行sql语句以联接PostgreSQL中的两个表,请执行以下操作: 数据库引擎会执行联接操作并发回联接结果吗?或者数据库会将表_1和表_2的所有记录发送给spark job和spark job进行连接吗?是否有一些文档来解释此操作?谢谢